Funkční monitor ve 32 bytech

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.

Quest_Super_Elf_full   Quest_Super_Elf_MonitorPROM

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
Příspěvek byl publikován v rubrice Cosmac. Můžete si uložit jeho odkaz mezi své oblíbené záložky.

3 komentáře: Funkční monitor ve 32 bytech

  1. Nostalcomp napsal:

    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?

    • Martin napsal:

      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.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *