; Disassembly of the file "E:\Eigene Dateien\8bit\SHARP\mz1500\Mz1500.rom"
;
; Created with dZ80 v1.31
;
; on Tuesday, 08 of February 2000 at 11:40 PM
;
; 20 of June 2016 - vaclavpe@seznam.cz - pridana spousta komentaru, ROM kod je kompilovatelny pomoci asxxxx
;
        .area   CODE1   (ABS)
        .ORG     0x0
        ;=========================================================
        ;                                                        =
        ;    Vektor sluzeb MZ-1500 monitoru                      =
        ;                                                        =
        ;=========================================================
L0000:  JP      L004A        ; start systemu, tu ma byt 0xE800
L0003:  JP      L07E6        ; cteni radku z KBD
        JP      L090E
L0009:  JP      L0918        ; podminene CRLF
L000C:  JP      L0920        ; mezera na CRT
        JP      L0924
L0012:  JP      L0935        ; PRNTC - znak na CRT
        JP      L0893
        JP      L08A1
        JP      L08BD
L001E:  JP      L0A32        ; BRKEY - test na break
        JP      L0436
        JP      L0475
        JP      L04D8
        JP      L04F8
        JP      L0588
        JP      L01C7
        JP      L0308
        .byte   0, 0          ; dorovnani obsahu pro RST38h
        JP      0x1038
        JP      L0358
        JP      L0577
        JP      L02E5
        JP      L02AB
        JP      L02BE

L004A:  LD      SP,#0x10F0     ; puvodni start systemu bez horni ROM
        IM      1
        CALL    L073E
        CALL    L0A32
        JR      NC,L0070     ; ani CTRL ani SHIFT
        CP      #0x20
        JR      NZ,L0070     ; SHIFT nas nezajima

L005B:  OUT     (#0xE1),A      ; zmenit mapovani RAM
        LD      DE,0xFFF0
        LD      HL,#0x006B
        LD      BC,#0x0005
        LDIR                 ;
        JP      0xFFF0        ; hop tam
        
RUNT:   OUT     (#0xE0),A      ; tohle se zkopiruje, odmapuje ROM
        JP      L0000        ;  a skoci na nulu v RAM

L0070:  LD      B,#0xFF        ; nulovani pameti infobloku kazety
        LD      HL,#0x10F1
        CALL    L0FD8
        LD      A,#0x16
        CALL    L0012        ; clear screen
        LD      A,#0x71
        LD      HL,#0xD800
        CALL    L09DE        ; nastaveni atributu CRT
        LD      HL,#0x038D     ; inicializace preruseni
        LD      A,#0xC3
        LD      (0x1038),A    ; INTSRQ
        LD      (#0x1039),HL   ; INTADR
        LD      A,#0x04
        LD      (#0x119E),A    ; inicializace tempa hudby
        CALL    L02BE        ; zastavit hudbu
        CALL    L0009
        LD      DE,#0x06E7
        RST     #0x18          ; uvodni zprava monitoru
        CALL    L0577        ; BEEPni
        LD      A,#0x01
        ;=========================================================
        ;                                                        =
        ;    Vstupni bod (WARM) dolniho monitoru                 =
        ;                                                        =
        ;=========================================================
PRMPT:
L00A4:  LD      (#0x119D),A    ; vypnout BEEP
        LD      HL,#0xE800     ; je na E800 ROM ?
        LD      (HL),A
        JR      L00F9        ; jestli je, tak skaceme

L00AD:  CALL    L0009
        LD      A,#0x2A        ; ohlasovaci znak '*'
        CALL    L0012
        LD      DE,#0x11A3
        CALL    L0003        ; cti prikaz
PRMLOP:
L00BB:  LD      A,(DE)
        INC     DE
        CP      #0x0D ; <CR>
        JR      Z,L00AD                 ; (-20)
        CP      'J
        JR      Z,L00EA                 ; (37)
        CP      'L
        JR      Z,L0108                 ; (63)
        CP      'F
        JR      Z,L00F6                 ; (41)
        CP      'B
        JR      Z,L00EE                 ; (29)
        CP      '#
        JR      Z,L005B                 ; (-122)
        CP      'P
        JR      Z,L0155                 ; (124)
        CP      'M
        JP      Z,L07AE
        CP      'S
        JP      Z,L0F58
        CP      'V
        JP      Z,L0FCB
        JR      L00BB                   ; (-47)
        ;
        ;=========================================================
        ;                                                        =
        ;    J = jump (preda rizeni programu)                    =
        ;                                                        =
        ;=========================================================
JUMP:
L00EA:  CALL    L0134
        JP      (HL)
        ;
        ;=========================================================
        ;                                                        =
        ;    B = beepx (zapne/vypne akusticky signal)            =
        ;                                                        =
        ;=========================================================
BEEPX: ; zapne/vypne akusticky
L00EE:  LD      A,(#0x119D)
        RRA     
        CCF     
        RLA     
        JR      L00A4                   ; (-82)
        ;
        ;=========================================================
        ;                                                        =
        ;    F = (podmineny skok na 0F000H)                      =
        ;        pozustatek po hardwaru MZ-700                   =
        ;                                                        =
        ;=========================================================
FPODMI:                        ; podiva se nahoru,
L00F6:  LD      HL,#0xF000     ; je-li tam neco zajimaveho
L00F9:  LD      A,(HL)
        OR      A            ; kdyz tsm bude nula, tsk nic
        JR      NZ,L00AD
        JP      (HL)         ; na nenulu skaceme
        ;
        ;  Rozpozna a ohlasi kod chyby, vraceny rutinami
        ;  pro praci s CMT:, pote se vraci do monitoru
        ;
CMTER:                      ; rozpozna a ohlasi
L00FE:  CP      #0x02          ; typ chyby z rutin CMT
        JR      Z,L00AD                 ; (-85)
        LD      DE,#0x0147
        RST     #0x18

L0106:  JR      L00AD        ; jen prodlouzeni relativniho skoku
        ;
        ;=========================================================
        ;                                                        =
        ;    L = load (precte soubor z magnetofonu)              =
        ;                                                        =
        ;=========================================================
LOAD:
L0108:  CALL    L04D8
        JR      C,L00FE                 ; (-15)
        CALL    L0009
        LD      DE,#0x013E
        RST     #0x18
        LD      DE,#0x10F1
        RST     #0x18
        CALL    L04F8
        JR      C,L00FE                 ; (-31)
        LD      HL,(#0x1106)
        LD      A,H
        CP      #0x12
        JR      C,L00AD                 ; (-120)
        JP      (HL)
        ;
        ;  Precte radek z klavesnice do standardniho
        ;  bufferu IOBUF (11A3H). Pri BREAK se vraci
        ;  do monitoru
        ;
GETL:
L0126:  EX      (SP),HL
        POP     BC
        LD      DE,#0x11A3
        CALL    L0003
        LD      A,(DE)
        CP      #0x1B
        JR      Z,L0106                 ; (-45)
        JP      (HL)
        ;
        ;  Dekoduje adresu ze vstupniho bufferu,
        ;  je-li chybna, vraci se do monitoru
        ;
HLHEX: ; dekoduje adresu v prikazu
L0134:  EX      (SP),IY
        POP     AF
        CALL    L0410
        JR      C,L0106                 ; (-54)
        JP      (IY)
        ;
        ;  Hlasky pro rutiny pracujici s CMT:
        ; 'LOADING ' a 'CHECK SUM ER.'
LOADI:  .str    'LOADING '
        .byte   #0x0D
CHECK:  .str    'CHECK SUM ER.'
        .byte   #0x0D
        ;=========================================================
        ;                                                        =
        ;    P = print (tiskne na tiskarne)                      =
        ;                                                        =
        ;=========================================================
        ;
        ;  Zbytek textu za prikazem P vytiskne na tiskarnu.
        ;  Tento text smi obsahovat nasledujici prikazy:
        ;
        ;
        ;   &L ..... nastavi mod 40 znaku na radku
        ;   &S ..... nastavi mod 80 znaku na radku
        ;   &C ..... vymena pera
        ;   &G ..... nastavi graficky mod
        ;   &T ..... provede test tiskarny
        ;
        ;
PRINT:                   ; vypis zbytek prikazu
L0155:  LD      A,(DE)
        CP      #0x26          ; '&' je priznak specialni funkce
        JR      NZ,L0170                ; (22)
L015A:  INC     DE
        LD      A,(DE)
        CP      #0x4C          ; 'L' je 40 znaku na radek
        JR      Z,L0176                 ; (22)
        CP      #0x53          ; 'S' je 80 znaku na radek
        JR      Z,L017B                 ; (23)
        CP      #0x43          ; 'C' je vymena per
        JR      Z,L018B                 ; (35)
        CP      #0x47          ; 'G' je graficky mod
        JR      Z,L0184                 ; (24)
        CP      #0x54          ; 'T' je test
        JR      Z,L0180                 ; (16)
L0170:  CALL    L01A5         ; zbytek prikazu vypise na tiskarnu
        JP      L00AD
        ; 'L' je 40 znaku na radek
L0176:  LD      DE,#0x0470
        JR      L0170                   ; (-11)
        ; 'S' je 80 znaku na radek
L017B:  LD      DE,#0x03D5
        JR      L0170                   ; (-16)
        ; 'T' je test
L0180:  LD      A,#0x04
        JR      L0186                   ; (2)
        ; 'G' je graficky mod
L0184:  LD      A,#0x02
L0186:  CALL    L018F
        JR      L015A                   ; (-49)
        ; 'C' je vymena per
L018B:  LD      A,#0x1D
        JR      L0186                   ; (-9)
        ;
        ;  Vytiskne znak z registru A na tiskarnu,
        ;  pri BREAK se vraci do monitoru
        ;
PCHAR:                      ; tisk znaku na LPT
L018F:  LD      C,#0x00
        LD      B,A
        CALL    L01B6        ; ceka na LPT
        LD      A,B
        OUT     (#0xFF),A      ; posle znak
        LD      A,#0x80
        OUT     (#0xFE),A      ; a potvrdi ho
        LD      C,#0x01
        CALL    L01B6        ; ceka az si ho tiskarna prevezme
L01A1:  XOR     A
        OUT     (#0xFE),A      ; shodi potvrzeni
        RET     
        ;
        ;  Vytiskne text na tiskarnu, jehoz adresa
        ;  je v registru DE, text konci znakem CR
        ;
PTEXT:                   ;  tisk textu na tiskarnu
L01A5:  PUSH    DE           ; v DE je adresa
        PUSH    BC           ;   a text konci <CR>
        PUSH    AF
L01A8:  LD      A,(DE)
        CALL    L018F        ; tiskne znak
        LD      A,(DE)       ; je to <CR> ?
        INC     DE
        CP      #0x0D
        JR      NZ,L01A8     ; neni takze tiskneme dal
        POP     AF
        POP     BC
        POP     DE
        RET     
        ;
        ;  Ceka, az bude tiskarna ready, pri BREAK
        ;  se vraci do monitoru
        ;
PTEST:                   ; test pripravenosti tiskarny
L01B6:  IN      A,(#0xFE)
        AND     #0x0D
        CP      C
        RET     Z            ; LPT je READY
        CALL    L001E        ; kdyz neni, tak je BREAK ?
        JR      NZ,L01B6                ; (-11)
        LD      SP,#0x10F0
        JP      L00AD        ; je BREAK, tak sup do monitoru
        ;#########################################################
        ;#                                                       #
        ;#                M E L O D I E                          #
        ;#                                                       #
        ;#########################################################
        ;
        ;  Zahraje hudbu ulozenou na DE, ukoncenou CR,
        ;   ta je tam ASCII v konvencich MZ-700 Basic
        ;
        ;  vstup:  DE - adresa retezce
        ;  nici:   AF
        ;
MELDY:
L01C7:  PUSH    BC
        PUSH    DE
        PUSH    HL
        LD      A,#0x02        ; standardni cislo oktavy
        LD      (#0x11A0),A
        LD      B,#0x01
L01D1:  LD      A,(DE)
        CP      #0x0D
        JR      Z,L0211                 ; (59)
        CP      #0xC8
        JR      Z,L0211                 ; (55)
        CP      #0xCF
        JR      Z,L0205                 ; (39)
        CP      #0x2D
        JR      Z,L0205                 ; (35)
        CP      #0x2B
        JR      Z,L020D                 ; (39)
        CP      #0xD7
        JR      Z,L020D                 ; (35)
        CP      #0x23
        LD      HL,#0x026C
        JR      NZ,L01F5                ; (4)
        LD      HL,#0x0284
        INC     DE
L01F5:  CALL    L021C
        JR      C,L01D1                 ; (-41)
        CALL    L02C8
        JR      C,L0214                 ; (21)
        CALL    L02AB
        LD      B,C
        JR      L01D1                   ; (-52)
L0205:  LD      A,#0x03
L0207:  LD      (#0x11A0),A
        INC     DE
        JR      L01D1                   ; (-60)
L020D:  LD      A,#0x01
        JR      L0207                   ; (-10)
L0211:  CALL    L02C8
L0214:  PUSH    AF
        CALL    L02BE
        POP     AF
        JP      L069B
        ;
        ;  Vyhleda v tabulce melodii skutecnou frekvenci a delku
        ;  podle ASCII retezce
        ;
        ;  vstup:  HL  - adresa tabulky
        ;          DE  - adresa do bufferu s notami
        ;          (DE) - hledana nota ASCII
        ;
        ;  vystup:
        ;
        ;    nota nalezena:    DE     = adresa dalsi polozky
        ;                      (FREQ) = frekvence 2 byty
        ;                      C      = delka noty
        ;                      A      = 0
        ;                      HL     = nedefinovan
        ;
        ;  Pokud 1. znak neni cislo noty, vraci CY=1
        ;                     a upravi jen DE
        ;  Pokud 2. znak neni delka, uvazuje drive zadanou delku
MELTB:
L021C:  PUSH    BC
        LD      B,#0x08
        LD      A,(DE)
L0220:  CP      (HL)
        JR      Z,L022C                 ; (9)
        INC     HL
        INC     HL
        INC     HL
        DJNZ    L0220                   ; (-8)
        SCF     
        INC     DE
        POP     BC
        RET     
        ; nasli jsme notu
L022C:  INC     HL
        PUSH    DE
        LD      E,(HL)
        INC     HL
        LD      D,(HL)
        EX      DE,HL
        LD      A,H
        OR      A
        JR      Z,L023F                 ; (9)
        LD      A,(#0x11A0)
L0239:  DEC     A
        JR      Z,L023F                 ; (3)
        ADD     HL,HL
        JR      L0239                   ; (-6)
L023F:  LD      (#0x11A1),HL
        LD      HL,#0x11A0
        LD      (HL),#0x02
        DEC     HL
        POP     DE
        INC     DE
        LD      A,(DE)
        LD      B,A
        AND     #0xF0
        CP      #0x30
        JR      Z,L0255                 ; (3)
        LD      A,(HL)
        JR      L025A                   ; (5)
L0255:  INC     DE
        LD      A,B
        AND     #0x0F
        LD      (HL),A
L025A:  LD      HL,#0x029C
        ADD     A,L
        LD      L,A
        LD      C,(HL)
        LD      A,(#0x119E)
        LD      B,A
        XOR     A
L0265:  ADD     A,C
        DJNZ    L0265                   ; (-3)
        POP     BC
        LD      C,A
        XOR     A
        RET     
        ;
        ;  tabulka melodii pro normalni noty - preorat do defb a defw
        ;
MEL:    ; jina nez v 1Z-013B
        .byte   0x43, 0xae, 0x06, 0x44, 0xf4, 0x05, 0x45, 0x4e, 0x05
        .byte   0x46, 0x02, 0x05, 0x47, 0x76, 0x04, 0x41, 0xf8, 0x03
        .byte   0x42, 0x8a, 0x03, 0x52, 0x00, 0x00, 0x43, 0x4e, 0x06
        .byte   0x44, 0x9e, 0x05, 0x45, 0x02, 0x05, 0x46, 0xba, 0x04
        .byte   0x47, 0x36, 0x04, 0x41, 0xc0, 0x03, 0x42, 0x58, 0x03
        .byte   0x52, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x06, 0x08
        .byte   0x0c, 0x010, 0x18, 0x20
        

L02A6:  INC     DE
        INC     DE
        INC     DE
        INC     DE
        RET     
        ;
        ;  Zapne hudbu o frekvenci ve (FREQ),
        ;    zapise ji do 8253 a provede  LD (>GATE0),1
        ;    tim se to spusti
        ;
MSTA:
L02AB:  LD      HL,(#0x11A1)
        LD      A,H
        OR      A
        JR      Z,L02BE                 ; (12)
        PUSH    DE
        EX      DE,HL
        LD      HL,#0xE004
        LD      (HL),E
        LD      (HL),D
        LD      A,#0x01
        POP     DE
        JR      L02C4                   ; (6)
        ;
        ;  Zastav hudbu
        ;
MSTP:
L02BE:  LD      A,#0x36
        LD      (#0xE007),A
        XOR     A
L02C4:  LD      (#0xE008),A
        RET     
        ;
        ;  Cekej az dohraje melodie
        ;
        ;  vstup:  B = delka cekani
        ;  vystup: HL = 0E000H
        ;          A  = 0
        ;          CY = 1 ... break
        ;               0 ... odcekano
        ;
MELW:
L02C8:  LD      HL,#0xE000
        LD      (HL),#0xF8
        INC     HL
        LD      A,(HL)
        AND     #0x81
        JR      NZ,L02D5                ; (2)
        SCF     
        RET     
L02D5:  LD      A,(#0xE008)
        RRCA    
        JR      C,L02D5                 ; (-6)
L02DB:  LD      A,(#0xE008)
        RRCA    
        JR      NC,L02DB                ; (-6)
        DJNZ    L02D5                   ; (-14)
        XOR     A
        RET     
        ;
        ;  Nastavi tempo melodie 0-7
        ;    8-A --> TEMPO
        ;
XTEMP:
L02E5:  PUSH    AF
        PUSH    BC
        AND     #0x0F
        LD      B,A
        LD      A,#0x08
        SUB     B
        LD      (#0x119E),A
        POP     BC
        POP     AF
        RET     
        ;
        ;  Vrati atributy aktualniho radku
        ;
        ;  vystup:  HL = pozice kurzoru
        ;           DE = adresa do tabulky dalsiho radku
        ;           A  bit 0 = atribut soucasneho radku
        ;           A  bit 7 = CY = atribut dalsiho radku
        ;
ATBLN:
L02F3:  LD      HL,#0x1173
        LD      A,(#0x1172)
        ADD     A,L
        LD      L,A
        LD      A,(HL)
        INC     HL
        RL      (HL)
        OR      (HL)
        RR      (HL)
        RRCA    
        EX      DE,HL
        LD      HL,(#0x1171)
        RET     
        ;#########################################################
        ;#                                                       #
        ;#            R E A L N Y   C A S                        #
        ;#                                                       #
        ;#########################################################
        ;
        ;  Nastaveni casu
        ;
        ;    A  = 0 ... dopoledne
        ;         1 ... odpoledne
        ;
        ;    DE = pocet sekund od zacatku puldne
        ;
        ;    Citace I8253 nastavi takto:
        ;      CT1 ... perioda 1 sekunda  (mod 2)
        ;      CT2 ... perioda 43200 period CT1 = 12 hodin (mod 0)
        ;
TIMST:
L0308:  DI      
        PUSH    BC
        PUSH    DE
        PUSH    HL
        LD      (#0x119B),A
        LD      A,#0xF0
        LD      (#0x119C),A
        LD      HL,#0xA8C0
        XOR     A
        SBC     HL,DE
        PUSH    HL
        NOP     
        EX      DE,HL
        LD      HL,#0xE007
        LD      (HL),#0x74
        LD      (HL),#0xB0
        DEC     HL
        LD      (HL),E
        LD      (HL),D
        DEC     HL
        LD      (HL),#0x0A
        LD      (HL),#0x00
        INC     HL
        INC     HL
        LD      (HL),#0x80
        DEC     HL
L0331:  LD      C,(HL)
        LD      A,(HL)
        CP      D
        JR      NZ,L0331                ; (-5)
        LD      A,C
        CP      E
        JR      NZ,L0331                ; (-9)
        DEC     HL
        NOP     
        NOP     
        NOP     
        LD      (HL),#0x54
        LD      (HL),#0x3D
        INC     HL
        POP     DE
L0344:  LD      C,(HL)
        LD      A,(HL)
        CP      D
        JR      NZ,L0344                ; (-5)
        LD      A,C
        CP      E
        JR      NZ,L0344                ; (-9)
        POP     HL
        POP     DE
        POP     BC
        EI      
        RET     
; pozustatek neceho - v 1Z-013B notz pro BEEP
        RST     #0x10
        LD      B,C
        JR      NC,L0363                ; (13)
        NOP     
        NOP     
        ;
        ;  Precte cas z I8253
        ;
        ;  vystup:  DE = pocet sekund od zacatku puldne
        ;
        ;           A  = 0 ... dopoledne
        ;           A  = 1 ... odpoledne
        ;
TIMRD:
L0358:  PUSH    HL
        LD      HL,#0xE007
        LD      (HL),#0x80
        DEC     HL
        DI      
        LD      E,(HL)
        LD      D,(HL)
        EI      
L0363:  LD      A,E
        OR      D
        JR      Z,L0375                 ; (14)
        XOR     A
        LD      HL,#0xA8C0
        SBC     HL,DE
        JR      C,L037F                 ; (16)
        EX      DE,HL
        LD      A,(#0x119B)
        POP     HL
        RET     
L0375:  LD      DE,#0xA8C0
L0378:  LD      A,(#0x119B)
        XOR     #0x01
        POP     HL
        RET     
L037F:  DI      
        LD      HL,#0xE006
        LD      A,(HL)
        CPL     
        LD      E,A
        LD      A,(HL)
        CPL     
        LD      D,A
        EI      
        INC     DE
        JR      L0378                   ; (-21)
        ;
        ;  Standardni rutina obsluhy preruseni
        ;    aktivuje se jednou za 12 hodin
        ;    a prepne AM/PM do druheho stavu
        ;
        ;     nastavi mod 0 do CT2
        ;     CT2 = CT2 + 43200 - 2
        ;
CLOCK: ; v 1Z-009B nevyuzita ?
        PUSH    AF
        PUSH    BC
        PUSH    DE
        PUSH    HL
        LD      HL,#0x119B
        LD      A,(HL)
        XOR     #0x01
        LD      (HL),A
        LD      HL,#0xE007
        LD      (HL),#0x80
        DEC     HL
        PUSH    HL
        LD      E,(HL)
        LD      D,(HL)
        LD      HL,#0xA8C0
        ADD     HL,DE
        DEC     HL
        DEC     HL
        EX      DE,HL
        POP     HL
        LD      (HL),E
        LD      (HL),D
        POP     HL
        POP     DE
        POP     BC
        POP     AF
        EI      
        RET     


L03B1:  CALL    L0920
        LD      A,(HL)
        CALL    L03C3
        LD      A,(HL)
        RET     


L03BA:  LD      A,H
        CALL    L03C3
        LD      A,L
        JR      L03C3                   ; (2)
        NOP     
        NOP     

L03C3:  PUSH    AF
        RRCA    
        RRCA    
        RRCA    
        RRCA    
        CALL    L03DA
        CALL    L0012
        POP     AF
        CALL    L03DA
        JP      L0012
        LD      BC,#0x0909
        ADD     HL,BC
        DEC     C

        ;
        ;  Prevod dolnich ctyr bitu A registru
        ;    na sestnactkovou cislici
        ;
        ;  vstup:  A = dolni ctyri bity
        ;  vystup: A = odpovidajici sestnactkova cislice
        ;              (v ASCII)
        ;
ASC:
L03DA:  AND     #0x0F
        CP      #0x0A
        JR      C,L03E2                 ; (2)
        ADD     A,#0x07
L03E2:  ADD     A,#0x30
        RET     
        ;
        ;  Prevede sestnactkovou cislici na
        ;    ctyrbitovou hodnotu
        ;
        ;  vstup:  A = cislice v ASCII
        ;  vystup: CY = 0  a  A = prislusna hodnota
        ;          CY = 1  nelze uskutecnit prevod
        ;            (v A je nedefinovana hodnota)
        ;
HEX:; jina funkce nez v 1Z-013B !!!
L03E5:  CP      #0x30
        RET     C
        CP      #0x3A
        JR      C,L03F6                 ; (10)
        SUB     #0x07
        CP      #0x40
        JR      NC,L040C                ; (26)
        CP      #0x39
        JR      C,L040C                 ; (22)
L03F6:  AND     #0x0F
        RET     


L03F9:  JR      L03E5                  ; (-22)

SPLAY:  .byte   0x7F
        .str    ' PLAY'
        .byte   0x0d
SREC:   .byte   0x7F
        .str    ' RECORD.'
        .byte   0x0d

L040C:  SCF     
        RET     

        NOP     
        NOP     

L0410:  PUSH    DE
        CALL    L041F
        JR      C,L041D                 ; (7)
        LD      H,A
        CALL    L041F
        JR      C,L041D                 ; (1)
        LD      L,A

L041D:  POP     DE
        RET     


L041F:  PUSH    BC
        LD      A,(DE)
        INC     DE
        CALL    L03F9
        JR      C,L0434                 ; (13)
        RRCA    
        RRCA    
        RRCA    
        RRCA    
        LD      C,A
        LD      A,(DE)
        INC     DE
        CALL    L03F9
        JR      C,L0434                 ; (1)
        OR      C

L0434:  POP     BC
        RET     


L0436:  DI      
        PUSH    DE
        PUSH    BC
        PUSH    HL
        LD      D,#0xD7
        LD      E,#0xCC
        LD      HL,#0x10F0
        LD      BC,#0x0080

L0444:  CALL    L071A
        CALL    L069F
        JR      C,L0464                 ; (24)
        LD      A,E
        CP      #0xCC
        JR      NZ,L045E                ; (13)
        CALL    L0009
        PUSH    DE
        LD      DE,#0x0467
        RST     #0x18
        LD      DE,#0x10F1
        RST     #0x18
        POP     DE

L045E:  CALL    L0780
        CALL    L048A

L0464:  JP      L0554
        LD      D,A
        LD      D,D
        LD      C,C
        LD      D,H
        LD      C,C
        LD      C,(HL)
        LD      B,A
        JR      NZ,L047D                ; (13)
        LD      BC,#0x0909
        DEC     BC
        DEC     C

L0475:  DI      
        PUSH    DE
        PUSH    BC
        PUSH    HL
        LD      D,#0xD7
        LD      E,#0x53

L047D:  LD      BC,(#0x1102)
        LD      HL,(#0x1104)
        LD      A,B
        OR      C
        JR      Z,L04D2                 ; (74)
        JR      L0444                   ; (-70)

L048A:  PUSH    DE
        PUSH    BC
        PUSH    HL
        LD      D,#0x02
        LD      A,#0xF8
        LD      (#0xE000),A

L0494:  LD      A,(HL)
        CALL    L076D
        LD      A,(#0xE001)
        AND     #0x81
        JP      NZ,L04A5
        LD      A,#0x02
        SCF     
        JR      L04D2                   ; (45)

L04A5:  INC     HL
        DEC     BC
        LD      A,B
        OR      C
        JP      NZ,L0494
        LD      HL,(#0x1197)
        LD      A,H
        CALL    L076D
        LD      A,L
        CALL    L076D
        CALL    L0D60
        DEC     D
        JP      NZ,L04C2
        OR      A
        JP      L04D2

L04C2:  LD      B,#0x00

L04C4:  CALL    L0D47
        DEC     B
        JP      NZ,L04C4
        POP     HL
        POP     BC
        PUSH    BC
        PUSH    HL
        JP      L0494

L04D2:  POP     HL
        POP     BC
        POP     DE
        RET     

        LD      C,C
        LD      E,B

L04D8:  DI      
        PUSH    DE
        PUSH    BC
        PUSH    HL
        LD      D,#0xD2
        LD      E,#0xCC
        LD      BC,#0x0080
        LD      HL,#0x10F0

L04E6:  CALL    L069F
        JP      C,L0572
        CALL    L065B
        JP      C,L0572
        CALL    L050E
        JP      L0554

L04F8:  DI      
        PUSH    DE
        PUSH    BC
        PUSH    HL
        LD      D,#0xD2
        LD      E,#0x53
        LD      BC,(#0x1102)
        LD      HL,(#0x1104)
        LD      A,B
        OR      C
        JP      Z,L0554
        JR      L04E6                   ; (-40)

L050E:  PUSH    DE
        PUSH    BC
        PUSH    HL
        LD      H,#0x02

L0513:  LD      BC,#0xE001
        LD      DE,#0xE002

L0519:  CALL    L0601
        JR      C,L0572                 ; (84)
        CALL    L0A4A
        LD      A,(DE)
        AND     #0x20
        JP      Z,L0519
        LD      D,H
        LD      HL,L0000
        LD      (#0x1197),HL
        POP     HL
        POP     BC
        PUSH    BC
        PUSH    HL

L0532:  CALL    L0624
        JR      C,L0572                 ; (59)
        LD      (HL),A
        INC     HL
        DEC     BC
        LD      A,B
        OR      C
        JR      NZ,L0532                ; (-12)
        LD      HL,(#0x1197)
        CALL    L0624
        JR      C,L0572                 ; (44)
        LD      E,A
        CALL    L0624
        JR      C,L0572                 ; (38)
        CP      L
        JR      NZ,L0565                ; (22)
        LD      A,E
        CP      H
        JR      NZ,L0565                ; (18)

L0553:  XOR     A

L0554:  POP     HL
        POP     BC
        POP     DE
        CALL    L0700
        PUSH    AF
        LD      A,(#0x119C)
        CP      #0xF0
        JR      NZ,L0563                ; (1)
        EI      

L0563:  POP     AF
        RET     


L0565:  DEC     D
        JR      Z,L056E                 ; (6)
        LD      H,D
        CALL    L0FE2
        JR      L0513                   ; (-91)

L056E:  LD      A,#0x01
        JR      L0574                   ; (2)

L0572:  LD      A,#0x02

L0574:  SCF     
        JR      L0554                   ; (-35)

L0577:  PUSH    DE
        LD      DE,#0x0352
        RST     #0x30
        POP     DE
        RET     


L057E:  CALL    L09FF
        CALL    L08CA
        CP      #0xF0
        RET     

        NOP     

L0588:  DI      
        PUSH    DE
        PUSH    BC
        PUSH    HL
        LD      BC,(#0x1102)
        LD      HL,(#0x1104)
        LD      D,#0xD2
        LD      E,#0x53
        LD      A,B
        OR      C
        JR      Z,L0554                 ; (-71)
        CALL    L071A
        CALL    L069F
        JR      C,L0572                 ; (-49)
        CALL    L065B
        JR      C,L0572                 ; (-54)
        CALL    L05AD
        JR      L0554                   ; (-89)

L05AD:  PUSH    DE
        PUSH    BC
        PUSH    HL
        LD      H,#0x02

L05B2:  LD      BC,#0xE001
        LD      DE,#0xE002

L05B8:  CALL    L0601
        JP      C,L0572
        CALL    L0A4A
        LD      A,(DE)
        AND     #0x20
        JP      Z,L05B8
        LD      D,H
        POP     HL
        POP     BC
        PUSH    BC
        PUSH    HL

L05CC:  CALL    L0624
        JR      C,L0572                 ; (-95)
        CP      (HL)
        JR      NZ,L056E                ; (-102)
        INC     HL
        DEC     BC
        LD      A,B
        OR      C
        JR      NZ,L05CC                ; (-14)
        LD      HL,(#0x1199)
        CALL    L0624
        CP      H
        JR      NZ,L056E                ; (-117)
        CALL    L0624
        CP      L
        JR      NZ,L056E                ; (-123)
        DEC     D
        JP      Z,L0553
        LD      H,D
        JR      L05B2                   ; (-62)

L05F0:  PUSH    AF
        LD      A,(#0x118E)
        CALL    L0FB1
        LD      (HL),A
        POP     AF
        RET     


L05FA:  CALL    L0009
        CALL    L03BA
        RET     


L0601:  LD      A,#0xF8
        LD      (#0xE000),A
        NOP     

L0607:  LD      A,(BC)
        AND     #0x81
        JR      NZ,L060E                ; (2)
        SCF     
        RET     


L060E:  LD      A,(DE)
        AND     #0x20
        JR      NZ,L0607                ; (-12)

L0613:  LD      A,(BC)
        AND     #0x81
        JR      NZ,L061A                ; (2)
        SCF     
        RET     


L061A:  LD      A,(DE)
        AND     #0x20
        JR      Z,L0613                 ; (-12)
        RET     

        NOP     
        NOP     
        NOP     
        NOP     

L0624:  PUSH    BC
        PUSH    DE
        PUSH    HL
        LD      HL,#0x0800
        LD      BC,#0xE001
        LD      DE,#0xE002

L0630:  CALL    L0601
        JP      C,L0654
        CALL    L0A4A
        LD      A,(DE)
        AND     #0x20
        JP      Z,L0649
        PUSH    HL
        LD      HL,(#0x1197)
        INC     HL
        LD      (#0x1197),HL
        POP     HL
        SCF     

L0649:  LD      A,L
        RLA     
        LD      L,A
        DEC     H
        JP      NZ,L0630
        CALL    L0601
        LD      A,L

L0654:  POP     HL
        POP     DE
        POP     BC
        RET     

        NOP     
        NOP     
        NOP     

L065B:  CALL    L0FE2
        PUSH    BC
        PUSH    DE
        PUSH    HL
        LD      HL,#0x2828
        LD      A,E
        CP      #0xCC
        JR      Z,L066C                 ; (3)
        LD      HL,#0x1414

L066C:  LD      (#0x1195),HL
        LD      BC,#0xE001
        LD      DE,#0xE002

L0675:  LD      HL,(#0x1195)

L0678:  CALL    L0601
        JR      C,L069B                 ; (30)
        CALL    L0A4A
        LD      A,(DE)
        AND     #0x20
        JR      Z,L0675                 ; (-16)
        DEC     H
        JR      NZ,L0678                ; (-16)

L0688:  CALL    L0601
        JR      C,L069B                 ; (14)
        CALL    L0A4A
        LD      A,(DE)
        AND     #0x20
        JR      NZ,L0675                ; (-32)
        DEC     L
        JR      NZ,L0688                ; (-16)
        CALL    L0601

L069B:  POP     HL
        POP     DE
        POP     BC
        RET     


L069F:  PUSH    BC
        PUSH    DE
        PUSH    HL
        LD      B,#0x0A

L06A4:  LD      A,(#0xE002)
        AND     #0x10
        JR      Z,L06B9                 ; (14)

L06AB:  LD      B,#0xFF

L06AD:  CALL    L09A6
        JR      L06B4                   ; (2)
        JR      L069F                   ; (-21)

L06B4:  DJNZ    L06AD                  ; (-9)
        XOR     A

L06B7:  JR      L069B                  ; (-30)

L06B9:  LD      A,#0x06
        LD      HL,#0xE003
        LD      (HL),A
        INC     A
        LD      (HL),A
        DJNZ    L06A4                   ; (-31)
        CALL    L0009
        LD      A,D
        CP      #0xD7
        JR      Z,L06D0                 ; (5)
        LD      DE,#0x03FB
        JR      L06D7                   ; (7)

L06D0:  LD      DE,#0x0402
        RST     #0x18
        LD      DE,#0x03FD

L06D7:  RST     #0x18

L06D8:  LD      A,(#0xE002)
        AND     #0x10
        JR      NZ,L06AB                ; (-52)
        CALL    L0A32
        JR      NZ,L06D8                ; (-12)
        SCF     
        JR      L06B7                   ; (-48)
        LD      HL,(#0x202A)
        JR      NZ,L0739                ; (77)
        LD      C,A
        LD      C,(HL)
        LD      C,C
        LD      D,H
        LD      C,A
        LD      D,D
        JR      NZ,L0725                ; (49)
        LD      E,D
        DEC     L
        JR      NC,L0728                ; (48)
        ADD     HL,SP
        LD      B,D
        JR      NZ,L071C                ; (32)
        LD      HL,(#0x0D2A)
        NOP     

L0700:  PUSH    AF
        PUSH    BC
        PUSH    DE
        LD      B,#0x0A

L0705:  LD      A,(#0xE002)
        AND     #0x10
        JR      Z,L0717                 ; (11)
        LD      A,#0x06
        LD      (#0xE003),A
        INC     A
        LD      (#0xE003),A
        DJNZ    L0705                   ; (-18)

L0717:  JP      L0EE6

L071A:  PUSH    BC
        PUSH    DE

L071C:  PUSH    HL
        LD      DE,L0000

L0720:  LD      A,B
        OR      C
        JR      NZ,L072F                ; (11)
        EX      DE,HL

L0725:  LD      (#0x1197),HL

L0728:  LD      (#0x1199),HL
        POP     HL
        POP     DE
        POP     BC
        RET     


L072F:  LD      A,(HL)
        PUSH    BC
        LD      B,#0x08

L0733:  RLCA    
        JR      NC,L0737                ; (1)
        INC     DE

L0737:  DJNZ    L0733                  ; (-6)

L0739:  POP     BC
        INC     HL
        DEC     BC
        JR      L0720                   ; (-30)

        ;
        ;  Inicializacni rutina
        ;
        ;    nastavuje I8255 do rezimu 0
        ;       A, Cl jako vystupni
        ;       B, Ch jako vstupni
        ;    posila hranu na signal MOTOR
        ;       tedy ho zapina, pokud
        ;       byl vypnuty a naopak
        ;    povoluje periodicke preruseni
        ;       z casovace I8253
        ;
        ;  nici:   HL
        ;
INI55:
L073E:  LD      HL,#0xE003
        LD      (HL),#0x8A
        LD      (HL),#0x07
        LD      (HL),#0x05
        RET     


L0748:  RRA     
        JR      NC,L0767                ; (28)
        LD      DE,#0x0C2A
        ADD     HL,DE
        LD      A,(HL)
        DEC     A
        CP      #0x1A
        JP      L0902
        NOP     
        NOP     
        NOP     

L0759:  LD      A,#0x15

L075B:  DEC     A
        JP      NZ,L075B
        RET     


L0760:  LD      A,#0x13

L0762:  DEC     A
        JP      NZ,L0762
        RET     


L0767:  LD      DE,#0x0BEA
        JP      L0901

L076D:  PUSH    BC
        LD      B,#0x08
        CALL    L0D60

L0773:  RLCA    
        CALL    C,L0D60
        CALL    NC,L0D47
        DEC     B
        JP      NZ,L0773
        POP     BC
        RET     


L0780:  PUSH    BC
        PUSH    DE
        LD      A,E
        LD      BC,#0x55F0
        LD      DE,#0x2828
        CP      #0xCC
        JP      Z,L0794
        LD      BC,#0x2AF8
        LD      DE,#0x1414

L0794:  CALL    L0D47
        DEC     BC
        LD      A,B
        OR      C
        JR      NZ,L0794                ; (-8)

L079C:  CALL    L0D60
        DEC     D
        JR      NZ,L079C                ; (-6)

L07A2:  CALL    L0D47
        DEC     E
        JR      NZ,L07A2                ; (-6)
        CALL    L0D60
        POP     DE
        POP     BC
        RET     


L07AE:  CALL    L0134

L07B1:  CALL    L05FA
        CALL    L03B1
        CALL    L0920
        CALL    L0126
        CALL    L0410
        JR      C,L07DD                 ; (27)
        CALL    L02A6
        INC     DE
        CALL    L041F
        JR      C,L07B1                 ; (-26)
        CP      (HL)
        JR      NZ,L07B1                ; (-29)
        INC     DE
        LD      A,(DE)
        CP      #0x0D
        JR      Z,L07DA                 ; (6)
        CALL    L041F
        JR      C,L07B1                 ; (-40)
        LD      (HL),A

L07DA:  INC     HL
        JR      L07B1                   ; (-44)

L07DD:  LD      H,B
        LD      L,C
        JR      L07B1                   ; (-48)
        ADD     HL,HL
        DI      
        INC     (IX+#0x00)

L07E6:  PUSH    AF
        PUSH    BC
        PUSH    HL
        PUSH    DE

L07EA:  CALL    L09B3
        LD      B,A
        LD      A,(#0x119D)
        RRCA    
        CALL    NC,L0577
        LD      A,B
        LD      HL,#0x1170
        AND     #0xF0
        CP      #0xC0
        LD      A,B
        JR      NZ,L0812                ; (18)
        CP      #0xCD
        JR      Z,L085B                 ; (87)
        CP      #0xCB
        JP      Z,L0821
        CP      #0xC7
        JR      NC,L081C                ; (15)
        BIT     1,(HL)
        LD      A,B
        JR      Z,L081C                 ; (10)

L0812:  CP      #0xF3
        JP      Z,L097B
        CALL    L0DB5
        JR      L07EA                   ; (-50)

L081C:  CALL    L0DDC
        JR      L07EA                   ; (-55)

L0821:  POP     HL
        PUSH    HL
        LD      (HL),#0x1B
        INC     HL
        LD      (HL),#0x0D
        JR      L083A                   ; (16)

L082A:  CALL    L0831
        JR      Z,L0877                 ; (72)
        JR      L0880                   ; (79)

L0831:  SET     3,H
        BIT     7,(HL)
        RES     3,H
        RET     


L0838:  JR      Z,L088A                ; (80)

L083A:  CALL    L090E
        POP     DE
        POP     HL
        POP     BC
        POP     AF
        RET     


L0842:  RRCA    
        JR      NC,L0865                ; (32)
        JR      L0863                   ; (28)

L0847:  LD      A,#0xFF
        LD      (#0x1192),A
        LD      A,#0x02
        LD      (#0x1170),A
        JP      L08D4

L0854:  CALL    L09A6
        CALL    L0A50
        RET     


L085B:  CALL    L02F3
        LD      B,#0x28
        JR      NC,L0842                ; (-32)
        DEC     H

L0863:  LD      B,#0x50

L0865:  LD      L,#0x00
        CALL    L0FB4
        POP     DE
        PUSH    DE

L086C:  LD      A,(#0x119D)
        RLA     
        JR      C,L082A                 ; (-72)
        CALL    L0831
        JR      Z,L0880                 ; (9)

L0877:  CCF     
        RRA     
        LD      (#0x119D),A
        LD      A,#0x05
        LD      (DE),A
        INC     DE

L0880:  LD      A,(HL)
        CALL    L0BCE
        LD      (DE),A
        INC     HL
        INC     DE
        DJNZ    L086C                   ; (-29)
        EX      DE,HL

L088A:  LD      (HL),#0x0D
        DEC     HL
        LD      A,(HL)
        CP      #0x20
        JR      L0838                   ; (-90)
        NOP     

L0893:  PUSH    AF
        PUSH    BC
        PUSH    DE

L0896:  LD      A,(DE)
        CP      #0x0D
        JR      Z,L08A7                 ; (12)
        CALL    L0935
        INC     DE
        JR      L0896                   ; (-11)

L08A1:  PUSH    AF
        PUSH    BC
        PUSH    DE

L08A4:  LD      A,(DE)
        CP      #0x0D

L08A7:  JP      Z,L0EE6
        CALL    L0BB9
        CALL    L096C
        INC     DE
        JR      L08A4                   ; (-15)

L08B3:  POP     HL

L08B4:  SUB     #0xF0
        RET     Z

        ADD     A,#0xF0
        JP      L0BCE
        NOP     

L08BD:  CALL    L08CA
        JR      NC,L08B4                ; (-14)
        PUSH    HL
        LD      HL,#0x119D
        SET     7,(HL)
        JR      L08B3                   ; (-23)

L08CA:  PUSH    BC
        PUSH    DE
        PUSH    HL
        CALL    L0854
        LD      A,B
        RLCA    
        JR      C,L08DA                 ; (6)

L08D4:  LD      A,#0xF0

L08D6:  POP     HL
        POP     DE
        POP     BC
        RET     


L08DA:  LD      A,B
        CP      #0x88
        JP      Z,L0980
        LD      H,#0x00
        LD      L,C
        BIT     5,A
        JR      NZ,L08FE                ; (23)
        LD      A,C
        CP      #0x01
        JP      Z,L0847
        LD      A,(#0x1170)
        RRCA    
        JP      C,L0A01
        RRCA    
        JR      C,L0905                 ; (14)
        LD      A,B
        RLA     
        RLA     
        RLA     
        JP      NC,L0748

L08FE:  LD      DE,#0x0CAA

L0901:  ADD     HL,DE

L0902:  LD      A,(HL)
        JR      L08D6                   ; (-47)

L0905:  LD      DE,#0x0C6A
        JR      L0901                   ; (-9)
        NOP     
        NOP     
        NOP     
        NOP     

L090E:  XOR     A
        LD      (#0x1194),A
        LD      A,#0xCD
        JR      L0959                   ; (67)
        NOP     
        NOP     

L0918:  LD      A,(#0x1194)
        OR      A
        RET     Z

        JR      L090E                   ; (-17)
        NOP     

L0920:  LD      A,#0x20
        JR      L0935                   ; (17)

L0924:  CALL    L000C
        LD      A,(#0x1194)
        OR      A
        RET     Z


L092C:  SUB     #0x0A
        JR      C,L0924                 ; (-12)
        JR      NZ,L092C                ; (-6)
        NOP     
        NOP     
        NOP     
        ;
        ;   Vystup znaku na CRT
        ;     (pres PRNTA nebo ?DPCT)
        ;
        ;     vstup: A  =  vystupujici znak
        ;     nici: AF
        ;
PRNTC:
L0935:  CP      #0x0D
        JR      Z,L090E                 ; (-43)
        PUSH    BC
        LD      C,A
        LD      B,A
        CALL    FPRNTC
        LD      A,B
        POP     BC
        RET     

S0942:  .str    'OK!'
        .byte   0x0d

        ;
        ;   PRNTC bez schovani registru
        ;
FPRNTC: LD    A,C
        CALL    L0BB9
        LD      C,A
        CP      #0xF0
        RET     Z

        AND     #0xF0
        CP      #0xC0
        LD      A,C
        JR      NZ,L096C                ; (23)
        CP      #0xC7
        JR      NC,L096C                ; (19)

L0959:  CALL    L0DDC
        CP      #0xC3
        JR      Z,L096F                 ; (15)
        CP      #0xC5
        JR      Z,L0967                 ; (3)
        CP      #0xC6
        RET     NZ


L0967:  XOR     A

L0968:  LD      (#0x1194),A    ; ulozeni CSRH
        RET     

        ;
        ;   Znak z A v display kodu primo do VRAM a
        ;     posunout CSRH
        ;
        ;   vstup: A = znak v display codu
        ;   nici : AF
        ;
L096C:  CALL    L0DB5

L096F:  LD      A,(#0x1194)    ; inkrementace CSRH
        INC     A
        CP      #0x50
        JR      C,L0968                 ; (-15)
        SUB     #0x50
        JR      L0968        ; ulozeni CSRH

L097B:  LD      (HL),#0x05
        JP      L07EA

L0980:  LD      A,#0xCB
        OR      A
        JP      L08D6

L0986:  LD      A,L
        ADD     A,#0xDE
        LD      L,A
        RET     


L098B:  LD      A,(#0x118E)
        JR      L09F8                   ; (104)

L0990:  BIT     5,A
        JR      Z,L0996                 ; (2)
        OR      A
        RET     


L0996:  LD      A,#0x20
        OR      A
        SCF     
        RET     

S099B:  .str    'FILENAME? '
        .byte   0x0d

L09A6:  PUSH    BC
        LD      B,#0x15

L09A9:  CALL    L0A4A
        DJNZ    L09A9                   ; (-5)
        POP     BC
        RET     

        NOP     
        NOP     
        NOP     

L09B3:  PUSH    HL
        CALL    L0B92

L09B7:  CALL    L057E
        JR      NZ,L09B7                ; (-5)

L09BC:  CALL    L057E
        JR      Z,L09BC                 ; (-5)
        LD      H,A
        CALL    L09A6
        CALL    L08CA
        PUSH    AF
        CP      H
        POP     HL
        JR      NZ,L09BC                ; (-17)
        BIT     0,L
        LD      HL,#0x119D
        RES     7,(HL)
        JR      Z,L09D8                 ; (2)
        SET     7,(HL)

L09D8:  CALL    L05F0
        POP     HL
        RET     


L09DD:  XOR     A

L09DE:  LD      BC,#0x0800
        PUSH    DE
        LD      D,A

L09E3:  LD      (HL),D
        INC     HL
        DEC     BC
        LD      A,B
        OR      C
        JR      NZ,L09E3                ; (-7)
        POP     DE
        RET     


L09EC:  PUSH    AF
        PUSH    HL
        LD      A,(#0xE002)
        RLCA    
        RLCA    
        JR      C,L098B                 ; (-106)
        LD      A,(#0x1192)

L09F8:  CALL    L0FB1
        LD      (HL),A
        POP     HL
        POP     AF
        RET     


L09FF:  JR      L09EC                  ; (-21)

L0A01:  RRCA    
        RRCA    
        JR      NC,L0A1C                ; (23)
        BIT     6,B
        JR      Z,L0A14                 ; (11)
        LD      DE,#0x0D29
        CALL    L0986
        JP      NC,L08D4
        JR      L0A17                   ; (3)

L0A14:  LD      DE,#0x0CE9

L0A17:  ADD     HL,DE
        SCF     
        JP      L0902

L0A1C:  BIT     6,B
        JR      Z,L0A2C                 ; (12)
        LD      DE,#0x0D29
        CALL    L0986
        JP      NC,L08D4
        JP      L0901

L0A2C:  LD      DE,#0x0CE9
        JP      L0901

L0A32:  LD      A,#0xF8
        LD      (#0xE000),A
        NOP     
        LD      A,(#0xE001)
        OR      A
        RRA     
        JP      C,L0990
        RLA     
        RLA     
        JR      NC,L0A48                ; (4)
        LD      A,#0x40
        SCF     
        RET     


L0A48:  XOR     A
        RET     


L0A4A:  LD      A,#0x45
        JP      L0762
        NOP     

L0A50:  PUSH    DE
        PUSH    HL
        XOR     A
        LD      B,#0xF8
        LD      D,A
        CALL    L0A32
        JR      NZ,L0A5F                ; (4)
        LD      D,#0x88
        JR      L0A73                   ; (20)

L0A5F:  JR      NC,L0A66               ; (5)
        LD      D,A
        JR      L0A66                   ; (2)

L0A64:  SET     7,D

L0A66:  DEC     B
        LD      A,B
        LD      (#0xE000),A
        CP      #0xEF
        JR      NZ,L0A77                ; (8)
        CP      #0xF8
        JR      Z,L0A66                 ; (-13)

L0A73:  LD      B,D
        POP     HL
        POP     DE
        RET     


L0A77:  LD      A,(#0xE001)
        CPL     
        OR      A
        JR      Z,L0A66                 ; (-24)
        LD      E,A
        LD      H,#0x08
        LD      A,B
        AND     #0x0F
        RLCA    
        RLCA    
        RLCA    
        LD      C,A
        LD      A,E

L0A89:  DEC     H
        RRCA    
        JR      NC,L0A89                ; (-4)
        LD      A,H
        ADD     A,C
        LD      C,A
        JR      L0A64                   ; (-46)
        
        ;
        ;  Tabulka prevodu "ASCII na display"
        ;
        ; Tabulka obsahuje 256 bytu, znaky v "DISPLAY" kodu.
        ; Indexem do tabulky je znak v "ASCII"
        ;
ADCN:   ; lisi se od 1Z-013B !!!
        .byte  0xF0,0xF0,0xF0,0xF3,0xF0,0xF5,0xF0,0xF0
        .byte  0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0
        .byte  0xF0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xF0
        .byte  0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0
        .byte  0x00,0x61,0x62,0x63,0x64,0x65,0x66,0x67
        .byte  0x68,0x69,0x6B,0x6A,0x2F,0x2A,0x2E,0x2D
        .byte  0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27
        .byte  0x28,0x29,0x4F,0x2C,0x51,0x2B,0x57,0x49
        .byte  0x55,0x01,0x02,0x03,0x04,0x05,0x06,0x07
        .byte  0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F
        .byte  0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17
        .byte  0x18,0x19,0x1A,0x52,0x59,0x54,0x50,0x45
        .byte  0xC7,0xC8,0xC9,0xCA,0xCB,0xCC,0xCD,0xCE
        .byte  0xCF,0xDF,0xE7,0xE8,0xE9,0xEA,0xEC,0xED
        .byte  0xD0,0xD1,0xD2,0xD3,0xD4,0xD5,0xD6,0xD7
        .byte  0xD8,0xD9,0xDA,0xDB,0xDC,0xDD,0xDE,0xC0
        .byte  0x80,0xBD,0x9D,0xB1,0xB5,0xB9,0xB4,0x9E
        .byte  0xB2,0xB6,0xBA,0xBE,0x9F,0xB3,0xB7,0xBB
        .byte  0xBF,0xA3,0x85,0xA4,0xA5,0xA6,0x94,0x87
        .byte  0x88,0x9C,0x82,0x98,0x84,0x92,0x90,0x83
        .byte  0x91,0x81,0x9A,0x97,0x93,0x95,0x89,0xA1
        .byte  0xAF,0x8B,0x86,0x96,0xA2,0xAB,0xAA,0x8A
        .byte  0x8E,0xB0,0xAD,0x8D,0xA7,0xA8,0xA9,0x8F
        .byte  0x8C,0xAE,0xAC,0x9B,0xA0,0x99,0xBC,0xB8
        .byte  0x40,0x3B,0x3A,0x70,0x3C,0x71,0x5A,0x3D
        .byte  0x43,0x56,0x3F,0x1E,0x4A,0x1C,0x5D,0x3E
        .byte  0x5C,0x1F,0x5F,0x5E,0x37,0x7B,0x7F,0x36
        .byte  0x7A,0x7E,0x33,0x4B,0x4C,0x1D,0x6C,0x5B
        .byte  0x78,0x41,0x35,0x34,0x74,0x30,0x38,0x75
        .byte  0x39,0x4D,0x6F,0x6E,0x32,0x77,0x76,0x72
        .byte  0x73,0x47,0x7C,0x53,0x31,0x4E,0x6D,0x48
        .byte  0x46,0x7D,0x44,0x1B,0x58,0x79,0x42,0x60
        

L0B92:  LD      HL,#0x1192
        LD      (HL),#0xEF
        LD      A,(#0x1170)
        RRCA    
        JR      C,L0BB5                 ; (24)
        RRCA    
        JR      NC,L0BA2                ; (2)
        LD      (HL),#0xFF

L0BA2:  LD      A,(HL)
        PUSH    AF
        CALL    L0FB1
        LD      A,(HL)
        LD      (#0x118E),A
        POP     AF
        LD      (HL),A
        XOR     A
        LD      HL,#0xE000

L0BB1:  LD      (HL),A
        CPL     
        LD      (HL),A
        RET     


L0BB5:  LD      (HL),#0x43
        JR      L0BA2                   ; (-23)

L0BB9:  PUSH    BC
        PUSH    HL
        LD      HL,#0x0A92
        LD      C,A
        LD      B,#0x00
        ADD     HL,BC
        LD      A,(HL)
        JR      L0BE0                   ; (27)
        LD      D,(HL)
        LD      SP,#0x302E
        LD      B,C
        DEC     C
        NOP     
        NOP     
        NOP     

L0BCE:  PUSH    BC
        PUSH    HL
        PUSH    DE
        LD      HL,#0x0A92
        LD      D,H
        LD      E,L
        LD      BC,#0x0100
        CPIR    
        JR      Z,L0BE3                 ; (6)
        LD      A,#0xF0

L0BDF:  POP     DE

L0BE0:  POP     HL
        POP     BC
        RET     


L0BE3:  OR      A
        DEC     HL
        SBC     HL,DE
        LD      A,L
        JR      L0BDF                   ; (-11)
        ;
        ;  Tabulky klavesnice
        ;
        ;  5 prevodnich tabulek z hardware kodu klavesnice do
        ;  display kodu, vsechny tabulky maji delku 64 znaku,
        ;  jen CTRL ma z neznamych duvodu pouze 63 znaku.
        ;
        ;
        ;  Normalni klavesy
        ;
        .byte  0xca,0xf0,0x2b,0xC9,0xF0,0x2C,0x4F,0xCD
        .byte  0x19,0x1A,0x55,0x68,0x69,0xF0,0xF0,0xF0
        .byte  0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18
        .byte  0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10
        .byte  0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08
        .byte  0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28
        .byte  0x6b,0x6a,0x2A,0x00,0x20,0x29,0x2F,0x2E
        .byte  0xC8,0xC7,0xC2,0xC1,0xC3,0xC4,0x49,0x2D
        ;
        ;  Shiftovane klavesy
        ;
        .byte  0xca,0xf0,0x2b,0xC9,0xF0,0x2c,0x4f,0xCD
        .byte  0x19,0x1A,0x55,0x50,0x80,0xF0,0xF0,0xF0
        .byte  0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18
        .byte  0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10
        .byte  0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08
        .byte  0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x52
        .byte  0x59,0xde,0xdd,0x00,0x60,0x54,0x51,0x57
        .byte  0xC6,0xC5,0xC2,0xC1,0xC3,0xC4,0x40,0x45
        ;
        ;  Normalni klavesy v grafickem modu
        ;
        .byte  0xca,0xF0,0x3e,0xC9,0xF0,0x79,0x1b,0xCD
        .byte  0x3d,0x5a,0x6d,0x36,0x4a,0xF0,0xF0,0xF0
        .byte  0x72,0x33,0x5d,0x71,0x70,0x46,0x73,0x53
        .byte  0x3c,0x1e,0x5e,0x78,0x56,0x43,0x77,0x76
        .byte  0x5c,0x41,0x44,0x1c,0x32,0x1d,0x1f,0x5f
        .byte  0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7
        .byte  0xdc,0xdb,0xda,0x00,0xd9,0xd8,0x42,0x4d
        .byte  0xc6,0xc5,0xC2,0xC1,0xC3,0xC4,0x47,0x4e
        ;
        ;  CTRL znaky - tabulka ma omylem jen 63 bytu, to
        ;  se projevuje tak, ze CTRL \ se interpretuje jako _
        ;
        .byte  0xF3,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0
        .byte  0xF0,0x5A,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0
        .byte  0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xF0,0xF0
        .byte  0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0
        .byte  0xF0,0xF0,0xF3,0xF0,0xF5,0xF0,0xF0,0xF0
        .byte  0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0
        .byte  0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0
        .byte  0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0
        ;
        ;  Shiftovana grafika
        ;
        .byte  0xca,0xF0,0x99,0xC9,0xF0,0x8d,0xbc,0xCD
        .byte  0x86,0x91,0xa0,0xb4,0xb8,0xF0,0xF0,0xF0
        .byte  0x94,0x9c,0x84,0x82,0x96,0x97,0x87,0x81
        .byte  0xa2,0x8e,0xb0,0xad,0x8c,0x8f,0xab,0xaa
        .byte  0x98,0x93,0x9a,0x92,0x88,0x90,0x83,0x8a
        .byte  0xa3,0x85,0xa4,0xa5,0xa6,0x95,0x89,0xa1
        .byte  0xa9,0xa8,0xa7,0x00,0x8b,0xaf,0xae,0xac
        .byte  0xC8,0xC7,0xC2,0xC1,0xC3,0xC4,0xBf,0x9b

        ; tady je v 1Z-013B povel DUMP, ale MZ1500 ho nema a  ma nejakou dalsi tabulku
        .byte  0xbb,0xF0,0xF0,0xF0,0xF0,0xF0,0x9e,0xb2
        .byte  0xb6,0xba,0xbe,0xF0,0xF0,0xF0,0xb7,0xb3
        .byte  0x9f,0x00,0xF0,0xF0,0xb5,0xbd,0xc6,0xc5
        .byte  0xc2,0xc1,0xc3,0xc4,0xF0,0xF0

L0D47:  PUSH    AF
        LD      A,#0x03
        LD      (#0xE003),A
        CALL    L0759
        CALL    L0759
        LD      A,#0x02
        LD      (#0xE003),A
        CALL    L0759
        CALL    L0759
        POP     AF
        RET     


L0D60:  PUSH    AF
        LD      A,#0x03
        LD      (#0xE003),A
        CALL    L0759
        CALL    L0759
        CALL    L0759
        CALL    L0760
        LD      A,#0x02
        LD      (#0xE003),A
        CALL    L0759
        CALL    L0759
        CALL    L0759
        CALL    L0759
        POP     AF
        RET     


L0D85:  LD      A,(DE)
        RLA     
        RLA     
        CCF     
        RRA     
        RRA     
        LD      (DE),A
        JR      L0E02                   ; (116)

        ; AVRAM - tohle odpovida adrese 0DBC z 1Z-013B
L0D8E:  LD      (HL),A       ; ulozime znak
        LD      HL,(#0x1171)
        LD      A,L
        CP      #0x27
        JR      NZ,L0DA2     ; nejsme na konci radku
        CALL    L02F3        ; atributy
        JR      C,L0DA2      ; pokracovaci radek
        EX      DE,HL
        LD      (HL),#0x01
        INC     HL
        LD      (HL),#0x00
L0DA2:  LD      A,#0xC3        ; CURSOR RIGHT
        JR      L0DE0        ; DPCT bez ukladani registru

        ;
        ;  Pocka na zacatek snimkoveho zatemnovaciho impulsu - neni vyuzito
        ;
        ; adresa stejna jako v 1Z-013B
BLNK:   PUSH    AF
L0DA7:  LD      A,(#0xE002)
        RLCA    
        JR      NC,L0DA7                ; (-6)
L0DAD:  LD      A,(#0xE002)
        RLCA    
        JR      C,L0DAD                 ; (-6)
        POP     AF
        RET     

        ; !!!POZOR, TU JE TO JINE!!!
        ;  Ulozi znak na pozici cursoru do VRAM, a provede
        ;  cursor right. Kdyz se ukladal znak na posledni sloupec,
        ;  upravi atributy konce radku.
        ;
        ;  vstup:  A - znak v display kodu
        ;
        ;@AVRAM:
L0DB5:  PUSH    AF
        PUSH    BC
        PUSH    DE
        PUSH    HL
        CALL    L0FB1        ; dej adresu kurzoru
        LD      DE,#0x119D
        CP      #0xF5
        JR      Z,L0D85                 ; (-62)
        PUSH    AF
        SET     3,H          ; atributovka
        CALL    L0FAB        ; tady je jen  LD B,(HL); RL B; EX DE,HL
        OR      A            ; WTF ???
        LD      A,(HL)       ; do A stav BEEP flagu ?
        RRA     
        OR      A            ; test na nulu
        JR      Z,L0DD3                 ; (4)
        AND     (HL)         ; tu neco s beepem
        JR      NZ,L0DD3                ; (1)
        SCF     

L0DD3:  EX      DE,HL        ; v HL zase kurzor
        RR      B
        LD      (HL),B
        RES     3,H          ; zpatky znakova VRAM
        POP     AF           ; v A mame opet znak
        JR      L0D8E                   ; (-78)

        ;
        ;  Provedeni ridicich znaku C0 - CF na CRT
        ;  Vsechny ostatni kody se ignoruji
        ;  Vyznam jednotlivych kodu je popsan v
        ;  tabulce !ADISP.
        ;
        ;  vstup: A = ridici kod C0-CF
        ;
L0DDC:  PUSH    AF
        PUSH    BC
        PUSH    DE
        PUSH    HL

L0DE0:  LD      B,A          ; ridici kod i do B
        AND     #0xF0
        CP      #0xC0
        JR      NZ,L0E02     ; neni to ridici kod tak pryc
        XOR     B
        RLCA                 ; bez horniho nibblu a *2
        LD      C,A
        LD      B,#0x00
        LD      HL,#0x0EAA     ; tabulka adres sluzeb
        ADD     HL,BC
        LD      E,(HL)       ; vyindexovat tabulku
        INC     HL
        LD      D,(HL)
        LD      HL,(#0x1171)   ; pozici kurzoru
        EX      DE,HL        ; do DE, v HL je sluzba
        JP      (HL)         ; sluzbu spustime
        ;
        ;  Cursor o radek niz
        ;  Je-li jiz na 24. radku, tak roluje
        ;
        ; neni vyuzito v 1Z-009B
CDOWN:  EX      DE,HL
        LD      A,H
        CP      #0x18          ; posledni radek ?
        JR      Z,L0E23      ; jdeme rolovat screen
        INC     H
L0DFF:  LD      (#0x1171),HL
L0E02:  JP      L0EE5        ; EXIT
        ;
        ;  Cursor o radek nahoru
        ;  Je-li jiz na 0. radku, nestane se nic
        ;
        ; neni vyuzito v 1Z-009B
CUP:    EX      DE,HL
        LD      A,H
        OR      A
        JR      Z,L0E02      ; nulty radek
        DEC     H
L0E0B:  JR      L0DFF        ; EXITC
        ;
        ;  Cursor o znak doprava
        ;
        ; neni vyuzito v 1Z-009B
CRIGHT: EX      DE,HL
        LD      A,L
        CP      #0x27          ; poslendi sloupec ?
        JR      NC,L0E16     ; jop
        INC     L
        JR      L0DFF        ; ulozit HL a EXITC
L0E16:  LD      L,#0x00        ; byl posledni sloupec
        INC     H            ; tak dalsi radek
        LD      A,H
        CP      #0x19          ; posledni radek ?
        JR      C,L0DFF      ; ne, je to ok
        LD      H,#0x18
        LD      (#0x1171),HL   ; ulozit kurzor a jde se rolovat
L0E23:  JR      L0E6D        ; SCROLL
        ;
        ;  Cursor o znak doleva
        ;
        ; neni vyuzito v 1Z-009B
CLEFT:  EX      DE,HL
        LD      A,L
        OR      A
        JR      Z,L0E2D      ; zacatek radku
        DEC     L            ; neni tak zmensit
        JR      L0DFF        ; EXITC
L0E2D:  LD      L,#0x27        ; konec radku
        DEC     H            ; predchazejiciho
        JP      P,L0E0B
        LD      H,#0x00        ; sloupec nulovy
        LD      (#0x1171),HL   ; ulozit a
        JR      L0E02        ; EXIT1
        ;
        ;  Smaz obrazovku
        ;
        ; neni vyuzito v 1Z-009B
CLEAR:  LD      HL,#0x1173
        LD      B,#0x1B
        CALL    L0FD8        ; smaz atributy radku
        LD      HL,#0xD000     ; vynuluj RAM data
        CALL    L09DD
        LD      A,#0x71        ; default atribut
        CALL    L09DE        ; smazat atributy
        ;
        ;  Cursor doleva nahoru
        ;
        ; neni vyuzito v 1Z-009B
HOME:   LD      HL,L0000
        JR      L0DFF        ; EXITC
;**** nevyuzito
        NOP     
        NOP     
        NOP     
        LD      HL,#0x119D
        RES     7,(HL)
        ;
        ;  Novy radek na CRT
        ;
        ; neni vyuzito v 1Z-009B
CRLF:   CALL    L02F3
        RRCA                 ; atribut pristiho radku
        JR      NC,L0E16     ;   pokracovaci, preskoc ho
        LD      L,#0x00
        INC     H
        CP      #0x18
        JR      Z,L0E6A      ; konec obrazovky, rolujeme
        INC     H
        JR      L0DFF        ; EXITC

L0E6A:  LD      (#0x1171),HL
        ;
        ;  Roluje CRT o jeden logicky radek nahoru
        ;
        ; neni vyuzito v 1Z-009B
        ;SCROLL:
L0E6D:  LD      BC,#0x03C0     ; delka
        LD      DE,#0xD000
        LD      HL,#0xD028
        PUSH    BC
        LDIR                 ; rolovani VRAM dat
        POP     BC
        PUSH    DE
        LD      DE,#0xD800
        LD      HL,#0xD828
        LDIR                 ; rolovani VRAM atributu
        LD      B,#0x28
        EX      DE,HL
        LD      A,#0x71
        CALL    L0FDD        ; mazani posledniho radku ATR VRAM
        POP     HL
        LD      B,#0x28
        CALL    L0FD8        ; mazani posledniho radku znaku VRAM
        LD      BC,#0x001A
        LD      DE,#0x1173
        LD      HL,#0x1174
        LDIR    
        LD      (HL),#0x00
        LD      A,(#0x1173)
        OR      A
        JR      Z,L0EE5      ; radek neni pokracovaci
        LD      HL,#0x1172     ;   je, znovu scroll
        DEC     (HL)
        JR      L0E6D        ; znova SCROLL
        ;
        ;  Tabulka adres sluzeb CRT (C0-CF)
        ;
        LD      L,L
        LD      C,#0xF8
        DEC     C
        DEC     B
        LD      C,#0x0D
        LD      C,#0x25
        LD      C,#0x4D
        LD      C,#0x3A
        LD      C,#0xF2
        LD      C,#0x32
        RRCA    
        POP     HL
        LD      C,#0xEE
        LD      C,#0xE5
        LD      C,#0xE5
        LD      C,#0x55
        LD      C,#0xE5
        LD      C,#0xE5
        .byte   0x0E
        ; cast insertu
L0ECA:  SET     3,H          ; znak ve VRAM atributu
        LD      A,(HL)
        INC     HL
        LD      (HL),A
        DEC     HL
        RES     3,H          ; ve VRAM data
        LDD     
        LD      A,C
        OR      B
        JR      NZ,L0ECA     ; smycka insertu
        EX      DE,HL
        LD      (HL),#00     ; pod kurzorem smazat
        SET     3,H
        LD      (HL),#0x71
        JR      L0EE5        ; EXIT
        ;
        ;  Nastavi alfanumericky mod
        ;
ALPHA:  XOR     A
L0EE2:  LD      (#0x1170),A
L0EE5:  POP     HL
L0EE6:  POP     DE
        POP     BC
        POP     AF
        RET     

        .byte   0, 0, 0, 0
        ;
        ; nastavi graficky mod a nic vic
        ;
        ; 1Z013B tu ma jeste test nastaveni a ulozeni znaku
        ; CALL  @?GMOD
        ; JP    Z,J0DB9
        LD      A,#01
        JR      L0EE2                   ; (-16)
        ;
        ; Vypust znak vlevo od kurzoru - tohle je dead code v 1Z-009B nebo se pouziva v 9Z502M
        ;
DELETE: EX      DE,HL
        LD      A,H
        OR      L
        JR      Z,L0EE5      ; jsme doma - exit
        LD      A,L
        OR      A
        JR      NZ,L0F08     ; kurzor neni na zacatku radku
        CALL    L02F3        ; kurzor je na zacatku radku
        JR      C,L0F08      ; radek je pokracovaci
        CALL    L0FB1
        DEC     HL
        LD      (HL),#00     ; sup na konec predchazejiciho
        JR      L0F2D 
        ; pokracovaci radek
L0F08:  CALL    L02F3
        RRCA                 ; atribut pristiho radku do CY
        LD      A,#0x28
        JR      NC,L0F11      
        RLCA                 ; pokracovaci radek
L0F11:  SUB     L            ; pocet znaku do konce radku
        LD      B,A          ; jako opakovac
        CALL    L0FB1
L0F16:  LD      A,(HL)       ; posun B bajtu vlevo ve VRAM data
        DEC     HL
        LD      (HL),A
        INC     HL
        SET     3,H          ; i v atributech
        LD      A,(HL)
        DEC     HL
        LD      (HL),A
        RES     3,H
        INC     HL
        INC     HL
        DJNZ    L0F16        ; posledni znak jeste neni posunut
        DEC     HL
        LD      (HL),#00     ; posledni znak smazat ve VRAM
        SET     3,H
        LD      HL,#0x0071     ; i jeho atribut? HL ma byt v zavorkach, stejna chyba v 1Z-013B
L0F2D:  LD      A,#0xC4        ; CURSOR LEFT
        JP      L0DE0        ; odskok kajs do dupy
        ;
        ; Vloz znak na misto kurzoru - tohle je dead code v 1Z-009B nebo se pouziva v 9Z502M
        ;
        ; adresa je ale L0F32, nikoli L0F38 jako v 1Z-013B
INSERT: CALL    L02F3
        RRCA                 ; atribut pristiho radku do CY
        LD      L,#0x27
        LD      A,L
        JR      NC,L0F3C                ; (1)
        INC     H            ; radek je dvojity
L0F3C:  CALL    L0FB4        ; adresa konce radku
        PUSH    HL
        LD      HL,(#0x1171)   ; pozice kurzoru
        JR      NC,L0F47                ; (2)
        LD      A,#0x4F        ; dvojita delka radku
L0F47:  SUB     L
        LD      B,#00
        LD      C,A          ; v BC je pocet znaku do konce
        POP     DE           ; obnovit adresu konce
        JR      Z,L0EE5                 ; (-105)
        LD      A,(DE)       ; posledni znak
        OR      A
        JR      NZ,L0EE5     ; EXIT - neni to mezera tak INSERT nelze
        LD      H,D
        LD      L,E
        DEC     HL           ; predposledni adresa do HL
        JP      L0ECA

        ;
        ;=================================================
        ;    S = save - ulozeni souboru na CMT
        ;=================================================
        ;
        ;[SAVE:
L0F58:  CALL    L0134        ; zadej adresu do HL
        LD      (#0x1104),HL   ; to bude zavadeci adresa
        LD      B,H          ; a taky dame do BC
        LD      C,L
        CALL    L02A6        ; na dalsi adresu
        CALL    L0134        ; sem s ni
        SBC     HL,BC        ; to je koncova adresa
        INC     HL
        LD      (#0x1102),HL   ; koncovou ulozit
        CALL    L02A6
        CALL    L0134        ; a jeste jedna adresa
        LD      (#0x1106),HL   ; ta je startovaci
        CALL    L0009        ; newline
        LD      DE,S099B
        RST     #0x18          ; dotay na jmeno souboru
        CALL    L0126        ; cteme jmeno souboru
        CALL    L02A6        ; DE = DE + 8
        CALL    L02A6
        LD      HL,#0x10F1     ; adresa v hlavicce
L0F88:  INC     DE           ; zkopirujeme jmeno
        LD      A,(DE)
        LD      (HL),A
        INC     HL
        CP      #0x0D          ; je <CR> tak koncime
        JR      NZ,L0F88                ; (-8)
        LD      A,#01        ; typ je vzdy 01 - OBJ
        LD      (#0x10F0),A
        CALL    L0436        ; zapis hlavicky
        JP      C,L00FE
        CALL    L0475        ; kdyz neni chyba tak zapis dat
        JP      C,L00FE      ; chyba
        CALL    L0009
        LD      DE,S0942
        RST     #0x18           ; newline a napsat OK!
        JP      L00AD         ; padej do monitoru

        ; tohleto se pouziva ve funkci L0DB5, ale zatim nevim k cemu
L0FAB:  LD      B,(HL)
        RL      B
        EX      DE,HL
        RET     

        NOP     
        ;
        ; Vrat adresu kurzoru do VRAM
        ;
        ; vystup: HL = adresa kurzoru
        ;
        ;@?POINT
L0FB1:  LD      HL,(#0x1171)
        ;@?ACUR ; tento vstupni biod predpoklada pozici v HL
L0FB4:  PUSH    AF
        PUSH    BC
        PUSH    DE
        PUSH    HL
        POP     BC           ; pozice je v BC
        LD      DE,#0x0028     ; delka radku
        LD      HL,#0xCFD8     ; radek pred zacatkem ADRCRT

L0FBF:  ADD     HL,DE
        DEC     B
        JP      P,L0FBF
        LD      B,#00
        ADD     HL,BC        ; pricteme jeste sloupec
        POP     DE
        POP     BC
        POP     AF
        RET     

        ;
        ;=================================================
        ;    V = verify - kontrola souboru na CMT
        ;=================================================
        ;
        ;[VERIF:
L0FCB:  CALL    L0588        ; proved verifikaci
        JP      C,L00FE      ; chyba nebo break
        LD      DE,S0942     ; vypis OK!
        RST     #0x18
        JP      L00AD        ; zpatky do monitoru
        ;
        ;----------------------------------
        ;     M A Z A N I   P A M E T I
        ;----------------------------------
        ; napln pamet nulou
L0FD8:  XOR     A
        JR      L0FDD                   ; (2)
        ; napln pamet FF - v MZ1500 se asi nevyuziva, leda v casti od E800h
        LD      A,#0xFF
        ; napln pamet konstantou
        ; Vstup: HL - adresa
        ;        A  - hodnota kterou se plni
        ;        B  - pocet bajtu
        ;
L0FDD:  LD      (HL),A
        INC     HL
        DJNZ    L0FDD                   ; (-4)
        RET     

        ;
        ;----------------------------------
        ;      M A G N E T O F O N
        ;----------------------------------
        ; Ceka na 100 bitovych nul na CMT
        ;
        ; Vystup: CY = 1 -> nuly nejsou
        ;         CY = 0 -> nuly nalezeny
        ;
        ;@RINTR
L0FE2:  PUSH    BC
        PUSH    DE
        PUSH    HL
        LD      BC,#0xE001     ; registry
        LD      DE,#0xE002
L0FEB:  LD      H,#0x64
L0FED:  CALL    L0601        ; cekej na nabeznou hranu
        JR      C,L0FFD      ; break
        CALL    L0A4A        ; cekej na read point
        LD      A,(DE)       ; cti branu C od 8255
        AND     #0x20          ;   a test na READCMT bit
        JR      NZ,L0FEB     ; jednicku nebrat - znovu
        DEC     H            ; dalsi nula
        JR      NZ,L0FED     ; jeste jich neni 100

L0FFD:  JP      L069B        ; POPX2