Za jeden z vrcholů programátorského umu považuji Wozův monitor v Apple-1, který celý zabírá jen 256 bytů. Nedávno jsem však narazil na zajímavost v počítači Quest Super Elf. Monitor v něm je naprogramovaný v PROM 82S123 (obdoba u nás více známé 74188, jen s třístavovým výstupem místo otevřeného kolektoru). Žádný adresní dekodér, jak v 74188 obvykle bývá, ale plnohodnotný monitor, který umožňuje prohlížet paměť, zadávat data i spouštět program. Vše v 32 bytech.
Nutno podotknout, že se nejedná až tak o o programátorský zázrak, jako spíš velmi chytře vyřešený hardware. Vše výrazně usnadňuje LOAD režim procesoru 1802, čip 74C923 na obsluhu klávesnice, hw obsluha řídících kláves i latchovaný displej, ale i tak mi přijde použití 32 bytů PROM jako monitor hodně zajímavé a rozhodně neobvyklé.
Jak jsem již napsal, Quest Super Elf se docela dobře obejde i bez monitoru, jen některé operace jsou o pak o něco pohodlnější. Monitor lze snadno připnout do paměťové oblasti 00-1F pomocí tlačítka M.
:10000000F8FFA1E16C64A3216C643F07370C3A113F
:10001000D3E3F633177B6C64233F13371B13301382
:00000001FF
;
; Quest Electronics Tiny Monitor (32 Bytes).
; Originally Copyright 1977 by Quest Electronics
;
;
; Released for unlimited non-commercial use
; by Roger Pitkin under
; Creative Commons Attribution-NonCommercial_ShareAlike
; 3.0 Unported License
;
; Contact Steve Gemeny - aa3nm(at)amsat.org for details
; and release notice.
;
;
; This version:
; Entered 2/24/2012 by Steve Gemeny
; FOR THE PseudoSam 18 Assembler
;
; This version:
; Entered 2/24/2012 by Steve Gemeny
; FOR THE PseudoSam 18 Assembler
;
; Modes:
; 00 execute from address entered
; (greater than 20H)
; 01 Dispaly contents of address entered
; 02 write switch contents to address entered
; Usage:
; Enter address into switch register before entering RUN
; RUN - Address previously entered is displayed
; Enter mode command (which is displayed)
; Press input when satisfied with displayed mode
; Reset to start again
;
.ORG X'0000
.CODE
LDI H'FF ;Load address of scratch location
PLO R1 ;used by monitor and use
SEX R1 ;R1 as data pointer
;
INP 4 ;get address which must
OUT 4 ;be enteres into keypad
PLO R3 ;prior to pushing GO (run)
;
MODE: DEC 1 ;Get and display mode now entered
INP 4 ;here via keypad.
OUT 4 ;
BN4 MODE ;Loop until Input key is pressed
MOD2: B4 MOD2 ;
BNZ MEM ;Check for code 00. If so, start
SEP R3 ;program execution.
MEM: SEX R3 ;If not then use R3 for input/output
;
SHR ;Set the DF falg, DF=1 for
;memory display; DF = 0 for
;memory loading. Note: ANY odd
;input value will indicate
;display mode and ANY even (except 00)
;input value will indicate memory load
;
;loop for loading or displaying memory:
MEMWR: BDF MEMRD ;If DF=0 set the Q LED, read the
SEQ ;keypad, display the contents
INP 4 ;and load current memory. When the
MEMRD: OUT 4 ;Input key is depressed, advance the
DEC R3 ;current location of memory by 1
BN4 MEMWR ;and do it again...
KEY: B4 KEY ;If DF=1, skip reading
INC R3 ;the keypad and just
BR MEMWR ;display contents of memory.
.END
Ale to je přece prakticky původní ETOPS, který byl publikován v Popular Electronics v návodu na ELFa! Koukám, že změny jsou jen kosmetické, ale rozsah 32 bajtů je shodný. Faktem je, že nebýt toho enkodéru klávesnice a latchovaných displejů, tak by to takto jednoduše nešlo. Díky tomu enkodéru je v podstatě fuk, jestli se zadává páčkami, nebo klavkou. Ve svém Elfu mám jen mírně vylepšenou verzi, která umožňuje 16-bitové adresování a přímé spouštění vybraných programů.
Podle literatury by ještě kratší monitor měl mít „tlačítkáč“ MiniSCAMP (22 bajtů), ale ten nebyl (ostatně stejně jako původní ETOPS) v ROM, ale musel se „napáčkovat“ ručně do RAM pomocí HW direct loadu.
Předpokládám, že ta PROM je oddělena nějakým třístavovým oddělovačem?
Jéé, to mě vůbec nenapadlo, díky za nakopnutí, kouknu se na to. Abych se přiznal původního Elfa jsem až tolik nezkoumal, mám Elf2k a tam je monitor superextraturbokmfortní 😉 Taky je v 32kB EPROM. Tady mě zaujala ta 32×8 PROM a když jsem zkoumal k čemu slouží, zjistil jsem, že obsahuje monitor, což jsem teda fakt nečekal. Byl jsem zvyklý na 74188 jako adresní dekodér. Jinak žádný třístavový oddělovač, PROM je sama třístavová a je přímo na sběrnici. CS je řešeno logikou, aby šla připnout místo části RAM.
Díky taky za to nakopnutí na MiniSCAMP, je to zajímavý kousek o kterém jsem doposud netušil.
http://www.astrorat.com/cosmacelf/questcosmacelf.html
Tu mas aj schemu cosmacu Efla z tou Prom