4993 lines
56 KiB
NASM
4993 lines
56 KiB
NASM
;
|
|
; DZ80 V3.4.1 8080 Disassembly of archive/VT100.bin
|
|
; 2016/08/03 14:55
|
|
;
|
|
; Comments beginning with ";;" borrowed from Adam Mayer's (https://github.com/phooky)
|
|
; work at https://github.com/phooky/VT100-Hax/blob/master/ROMs/haxrom.d80 and http://vt100romhax.tumblr.com
|
|
;
|
|
; All other comments/annotations by Jeff Parsons (@jeffpar) <Jeff@pcjs.org>
|
|
;
|
|
|
|
;
|
|
; Data area definitions
|
|
;
|
|
stack_top equ 204eh
|
|
scratch_start equ 204eh
|
|
|
|
;
|
|
; The "Keys Flag Byte/Buffer" at 0x2068 contains the following bits:
|
|
;
|
|
; 0-1 Key counter
|
|
; 2 Key counter overflow bit
|
|
; 3 Setup
|
|
; 4 Control
|
|
; 5 Shift
|
|
; 6 Caps Lock
|
|
; 7 Last Key
|
|
;
|
|
key_flags equ 2068h ; "Keys Flag Buffer"
|
|
key_buffer equ 206ah ; start of the "three place New Key Address Buffer"
|
|
|
|
cursor_address equ 20f6h
|
|
cursor_countdn equ 212dh
|
|
cursor_visible equ 21bah
|
|
|
|
;
|
|
; Reset vector
|
|
;
|
|
org 0
|
|
di
|
|
lxi sp,stack_top ; SP = 0x204e
|
|
jmp reset
|
|
;
|
|
; Interrupt vector 0x1 for Keyboard
|
|
;
|
|
org 8
|
|
call X00fd
|
|
ei
|
|
ret
|
|
;
|
|
; Interrupt vector 0x2 for PUSART
|
|
;
|
|
org 10h
|
|
call X03cc
|
|
ei
|
|
ret
|
|
;
|
|
; Interrupt vector 0x3 for Keyboard and PUSART
|
|
;
|
|
org 18h
|
|
call X03cc
|
|
call X00fd
|
|
ei
|
|
ret
|
|
;
|
|
; Interrupt vector 0x4 for Video (vertical retrace)
|
|
;
|
|
org 20h
|
|
call X04cf
|
|
ret
|
|
;
|
|
; Interrupt vector 0x5 for Keyboard and Video
|
|
;
|
|
org 28h
|
|
call X04cf
|
|
ret
|
|
;
|
|
; Interrupt vector 0x6 for PUSART and Video
|
|
;
|
|
org 30h
|
|
X0030: call X03cc
|
|
call X04cf
|
|
ei
|
|
ret
|
|
;
|
|
; Interrupt vector 0x7 for Keyboard and PUSART and Video
|
|
;
|
|
org 38h
|
|
jmp X0030
|
|
|
|
;
|
|
; Beginning of power-up (reset) code at 0x003b
|
|
;
|
|
reset: mvi e,1
|
|
X003d: di
|
|
mvi a,0fh
|
|
out 62h ;; 0x0f to NVR latch
|
|
cma ;; invert A (0xf0)
|
|
out 42h ;; 0xf0 to brightness
|
|
;;
|
|
;; Run checksum on each 2K ROM, indicating with
|
|
;; the keyboard LEDs which is being scanned.
|
|
;; The # of the chip being scanned is stored in B.
|
|
;;
|
|
xra a ;; zero A
|
|
mov d,a ;; zero D, L, H
|
|
mov l,a
|
|
mov h,a
|
|
X0049: inr a ;; next 2K ROM
|
|
mov b,a ;; store the current ROM # in B
|
|
out 82h ;; show current ROM on LEDs
|
|
mvi c,8 ;; Checksum over 8 256B blocks
|
|
X004f: rlc ;; Rotate A left
|
|
xra m ;; A <- A ^ memory
|
|
inr l ;; next memory address
|
|
jnz X004f ;; ... repeat until end of block
|
|
inr h ;; next block
|
|
dcr c ;; decrement block count
|
|
jnz X004f ;; ... repeat until end of chip
|
|
ora a ;; Check the value of the accumulator
|
|
X005b: jnz X005b ;; If it's not zero, hang forever
|
|
mov a,b ;; Put the ROM # back in the accumulator
|
|
cpi 4 ;; If it's not 4...
|
|
jnz X0049 ;; repeat for the next ROM
|
|
|
|
inr a
|
|
out 82h ;; write 5 to LEDs (turns on L2 and L4)
|
|
|
|
mvi c,0aah ;; Test pattern: 0xaa
|
|
mvi b,2ch ;; 0x2c is the top of RAM on the basic board
|
|
in 42h ;;
|
|
ani 2 ;; flags buffer &= 0x02 : is AVO installed?
|
|
jnz X0074 ;; if bit 2 is not set, AVO is installed
|
|
mvi b,40h ;; 0x40 is the top of RAM on the AVO
|
|
X0074: mov h,b ;; load HL with top of RAM
|
|
dcx h ;; dec HL
|
|
X0076: mvi m,0 ;; M <- 0
|
|
dcx h ;; dec HL
|
|
mov a,h ;; a <- h
|
|
cpi 1fh ;; compare to 1f (top of ROM)
|
|
jnz X0076 ;; continue to zero if not at ROM
|
|
|
|
inx h
|
|
;;
|
|
;; Zero all RAM. C gets the high byte of the address of the top of
|
|
;; RAM, HL is loaded with it, and it zeros memory all the way down,
|
|
;; leaving the start of RAM in HL
|
|
;;
|
|
;; From start of RAM, test that it's all zero
|
|
;;
|
|
X0080: mov a,m ;; read a byte of memory
|
|
ora a
|
|
jz X0090 ;; if it's zero, skip ahead
|
|
ani 0fh
|
|
mov a,h
|
|
jnz X00a1 ;; err
|
|
cpi 30h
|
|
jc X00a1 ;; err
|
|
X0090: mov m,c ;; run test pattern through ram
|
|
mov a,m
|
|
xra c
|
|
jz X00a8 ;; jump to 00a8 if ok
|
|
ani 0fh
|
|
mov a,h
|
|
jnz X00a1 ;; err
|
|
cpi 30h
|
|
jnc X00a8 ;; ok
|
|
X00a1: mvi d,1
|
|
cpi 2ch
|
|
X00a5: jc X00a5 ;; Hang if non-AVO memory
|
|
X00a8: xra a
|
|
inx h
|
|
ora l
|
|
jnz X0080
|
|
ora h
|
|
cmp b
|
|
jnz X0080
|
|
mov a,c ;; Repeat mem test with pattern 0x55
|
|
rlc
|
|
mov c,a
|
|
jc X0074
|
|
;;
|
|
;; Memory test is done
|
|
;;
|
|
push d
|
|
call X02a4 ;; zero scratch and screen mem
|
|
call X02eb ;; Set a number of scratch values to fixed values
|
|
call X175b ;; .... more memory initialization
|
|
pop d
|
|
X00c4: jz X00cb
|
|
mov a,d
|
|
ori 2
|
|
mov d,a
|
|
X00cb: mvi a,2fh
|
|
sta X21c9
|
|
out 62h
|
|
;
|
|
; Prepare to enter the "beep" loop
|
|
;
|
|
X00d2: lxi b,X0fff
|
|
ei
|
|
X00d6: mvi a,8
|
|
ana e
|
|
mvi a,7fh
|
|
jnz X00e0
|
|
mvi a,0ffh
|
|
X00e0: out 82h
|
|
dcx b
|
|
mov a,b
|
|
ora c
|
|
jnz X00d6
|
|
;
|
|
; Done "beeping" now
|
|
;
|
|
X00e8: out 82h ; A = 0, so all LEDs off now
|
|
lda key_flags
|
|
ora a
|
|
jm X00f5
|
|
mov a,d
|
|
ori 4
|
|
mov d,a
|
|
X00f5: push d
|
|
|
|
;
|
|
; The next call issues the following:
|
|
;
|
|
; 03A2 CD8103 CALL 0381 ;stack=204A
|
|
; 0B67 CDAD10 CALL 10AD ;stack=2048
|
|
; chipset.outPort(0x00A2,DC012,0x00) at 10BD
|
|
; chipset.outPort(0x00A2,DC012,0x04) at 10C1
|
|
;
|
|
; and then:
|
|
;
|
|
; 03A2 CD8103 CALL 0381 ;stack=204A
|
|
; 0B67 CDAD10 CALL 10AD ;stack=2048
|
|
; 10C9 CDAA0F CALL 0FAA ;stack=2046
|
|
; 0FB6 CC8814 CALLZ 1488 ;stack=2040
|
|
; 1488 CD9314 CALL 1493 ;stack=203E
|
|
; chipset.inPort(0x0042,FLAGS.BUFFER): 0x60 at 1493
|
|
;
|
|
; Note that once we're inside 0FAA, that appears to be where we stay.
|
|
;
|
|
call X03a2
|
|
|
|
pop d
|
|
jmp X0875
|
|
;
|
|
; Keyboard interrupt handler
|
|
;
|
|
X00fd: push psw
|
|
in 82h ;; Read from keyboard port
|
|
push h
|
|
push b
|
|
mov b,a ;; copy b <- a
|
|
sui 7ch ;; subtract 0x7c from a
|
|
jm X011a ;; jump to 011a if a is a normal key
|
|
mov h,a ;; otherwise h <- a
|
|
inr h ;; h++
|
|
mvi a,10h ;; a <- 0x10
|
|
rrc
|
|
X010d: rlc
|
|
dcr h
|
|
jnz X010d
|
|
lxi h,key_flags ;; load keys flag addresss
|
|
ora m ;; or in control bit
|
|
mov m,a ;; store again
|
|
jmp X012d ;; jump to end to interrupt
|
|
|
|
X011a: lxi h,key_flags ;; load keys flag address
|
|
mvi a,7
|
|
ana m ;; load key counter
|
|
cpi 4 ;; if overflow.. (>3 keys)
|
|
jp X012d ;; discard keypress and end interrupt
|
|
inr m ;; otherwise increment key counter
|
|
lxi h,key_buffer ;; load key address buffer
|
|
call X13de ;; add key counter to address buffer
|
|
mov m,b ;; save key to address buffer
|
|
X012d: pop b
|
|
pop h
|
|
pop psw
|
|
ret
|
|
;;
|
|
;; End of keyboard interrupt handler
|
|
;;
|
|
X0131: ani 7fh
|
|
mov c,a
|
|
lda X207b
|
|
ora a
|
|
jnz X01ff
|
|
X013b: mov a,c
|
|
cpi 1
|
|
jz X01c3
|
|
lda X21a7
|
|
ani 20h
|
|
jnz X0175
|
|
lda X2178
|
|
ora a
|
|
jnz X015f
|
|
mov a,c
|
|
cpi 41h
|
|
jm X015b
|
|
mvi a,1bh
|
|
call X0f18
|
|
X015b: mov a,c
|
|
jmp X080d
|
|
|
|
X015f: mvi a,1bh
|
|
call X0f18
|
|
mov a,c
|
|
cpi 41h
|
|
jp X015b
|
|
mvi a,3fh
|
|
X016c: call X0f18
|
|
mov a,c
|
|
adi 40h
|
|
jmp X080d
|
|
|
|
X0175: lda X2178
|
|
ora a
|
|
jnz X019e
|
|
mov a,c
|
|
cpi 41h
|
|
jm X015b
|
|
cpi 50h
|
|
jm X019e
|
|
X0187: mvi a,1bh
|
|
call X0f18
|
|
mvi a,4fh
|
|
X018e: call X0f18
|
|
jmp X015b
|
|
|
|
X0194: mvi a,1bh
|
|
call X0f18
|
|
mvi a,5bh
|
|
jmp X018e
|
|
|
|
X019e: lda X21bc
|
|
ora a
|
|
jz X01b5
|
|
mov a,c
|
|
cpi 41h
|
|
jp X0187
|
|
X01ab: mvi a,1bh
|
|
call X0f18
|
|
mvi a,4fh
|
|
jmp X016c
|
|
|
|
X01b5: mov a,c
|
|
cpi 41h
|
|
jm X01ab
|
|
cpi 50h
|
|
jm X0194
|
|
jmp X0187
|
|
|
|
X01c3: lxi h,X0815
|
|
push h
|
|
lda X21a5
|
|
ora a
|
|
rnz
|
|
call X0853
|
|
lxi b,X020e
|
|
lxi h,key_flags
|
|
mov a,m
|
|
ani 10h
|
|
jnz X0900
|
|
mov a,m
|
|
ani 20h
|
|
jz X01e4
|
|
lxi b,X00d2
|
|
X01e4: mvi a,25h
|
|
ori 8
|
|
ora b
|
|
out 1
|
|
lda X207f
|
|
add c
|
|
mov c,a
|
|
X01f0: push b
|
|
call X1493
|
|
pop b
|
|
lda X207f
|
|
cmp c
|
|
jnz X01f0
|
|
jmp X0394
|
|
|
|
X01ff: lxi h,X0812
|
|
push h
|
|
xra a
|
|
sta X2130
|
|
sta X21b8
|
|
lxi h,X21a3
|
|
mov a,c
|
|
X020e: sui 41h
|
|
mov b,a
|
|
X0211: mov a,m
|
|
jz X0222
|
|
dcr b
|
|
jz X0226
|
|
dcr b
|
|
jz X1815
|
|
dcr b
|
|
jz X181e
|
|
ret
|
|
|
|
X0222: dcr a
|
|
rm
|
|
mov m,a
|
|
ret
|
|
|
|
X0226: inr a
|
|
cpi 20h
|
|
rz
|
|
mov m,a
|
|
ret
|
|
|
|
X022c: lda X21a7
|
|
cma
|
|
ani 10h
|
|
lxi h,X21a5
|
|
ora m
|
|
jnz X0841
|
|
lda X21bf
|
|
lxi b,X0211
|
|
ana b
|
|
jnz X0245
|
|
mvi c,13h
|
|
X0245: mov a,c
|
|
sui 11h
|
|
sta X21c4
|
|
call X0f7e
|
|
jmp X0812
|
|
|
|
X0251: di
|
|
lxi sp,stack_top ; SP = 0x204e
|
|
lxi h,2000h
|
|
push h
|
|
mov a,m
|
|
rar
|
|
jc X0265
|
|
in 42h
|
|
ani 2
|
|
jz X0269
|
|
X0265: inr a
|
|
sta X21c8
|
|
X0269: call X03a2
|
|
lda X2050
|
|
dcr a
|
|
sta X2153
|
|
pop h
|
|
mov a,m
|
|
mvi m,7fh
|
|
ora a
|
|
jz X0298
|
|
jp X0285
|
|
lxi h,X21cb
|
|
mvi m,0ah
|
|
ani 7fh
|
|
X0285: sta X21bd
|
|
adi 30h
|
|
lhld cursor_address
|
|
mov m,a
|
|
cpi 34h
|
|
jz X0298
|
|
mvi a,20h
|
|
sta X21a5
|
|
X0298: call X0bf2
|
|
lxi b,X0011
|
|
call X0f7e
|
|
jmp X03ae
|
|
;;
|
|
;; Zero all scratch and screen RAM above stack
|
|
;;
|
|
X02a4: lxi h,scratch_start ;; HL = 0x204e (just above stack)
|
|
lxi d,0fb2h ;; DE = 0x0fb2 (every byte from 0x204e up to 0x3000)
|
|
mvi b,0 ;; B = 0
|
|
call memset ;; memset(0x1083): set 0x0fb2 bytes to 0 starting at 0x204e
|
|
cma ;; invert A
|
|
sta X2104 ;; store A in 0x2104
|
|
lxi h,X2004 ;; HL <- 0x2004
|
|
shld X2052 ;; *(0x2052) = 0x2004
|
|
lxi h,X22d0 ;; HL <- 0x22d0
|
|
shld cursor_address ;; *(20f6) = 0x22d0
|
|
ret
|
|
;;
|
|
;; Initialize start of screen RAM and wipe attribute RAM to 0xff
|
|
;;
|
|
X02c0: call X0a15 ;; 0x2140 = 0xe605
|
|
lxi h,2000h ;; HL = 0x2000
|
|
lxi d,X02d9 ;; DE = 0x02d9
|
|
mvi b,12h ;; B = 18
|
|
call memmove ;; copy 18 bytes from 0x02d9 to 0x2000
|
|
lxi h,3000h ;; HL = 0x3000
|
|
lxi d,1000h ;; DE = 0x1000
|
|
mvi b,0ffh ;; B = 0xFF
|
|
jmp memset ;; invoke memset(0x1083) to set all of attribute RAM to 0xFF and return
|
|
;;
|
|
;; 0x02d9 through 0x02eb are the initial values for the screen RAM;
|
|
;; it's copied into low RAM at 0x2000 during init.
|
|
;;
|
|
X02d9:
|
|
db 07fh,070h,003h
|
|
db 07fh,0f2h,0d0h
|
|
db 07fh,070h,006h
|
|
db 07fh,070h,00ch
|
|
db 07fh,070h,00fh
|
|
db 07fh,070h,003h
|
|
;;
|
|
;; Initialize several scratch values. We don't know what all of these are for yet.
|
|
;;
|
|
X02eb: lxi h,212h ;; HL = 0x0212 (530.)
|
|
shld cursor_countdn ;; Store 0x0212 at cursor_countdn [0x212d]
|
|
mvi a,35h ;; A = 0x35
|
|
sta X212c ;; 0x212c = 0x35
|
|
mvi a,1 ;; A = 1
|
|
sta X205b ;; 0x205b = 1
|
|
sta X2176 ;; 0x2176 = 1
|
|
lxi h,X07ff ;; HL = 0x07ff
|
|
shld X2149 ;; store 0xff07 at 0x2149
|
|
mvi a,2 ;; A = 2
|
|
sta X2073 ;; 0x2073 = 2
|
|
mvi a,0f7h ;; A = 0xf7
|
|
sta X20fa ;; 0x20fa = 0xf7
|
|
in 42h ;; read flags buffer
|
|
ani 4 ;; And it with 0x04 (check graphics flag)
|
|
mvi a,1 ;; A=1
|
|
jnz X031a ;; if no graphics skip
|
|
sta X2079 ;; else store 1 in 0x2079
|
|
X031a: mvi a,0ffh ;; A = 0xff
|
|
sta X210e ;; 0x210e = 0xff
|
|
sta cursor_visible ;; set cursor_visible [0x21ba] to 0xff (initially visible)
|
|
mvi h,80h ;; H = 0x80
|
|
mov l,h ;; L = 0x80
|
|
shld X20c0 ;; Store 0x8080 at 0x20c0
|
|
ret
|
|
|
|
X0329: mvi a,40h
|
|
out 1
|
|
lda X2158
|
|
out 2
|
|
lda X21a4
|
|
out 1
|
|
call X0394
|
|
mvi a,10h
|
|
sta X21c9
|
|
out 62h
|
|
ret
|
|
|
|
X0342: lda X21a2
|
|
ora a
|
|
jz X034b
|
|
mvi a,10h
|
|
X034b: mov b,a
|
|
out 0c2h
|
|
lda X207c
|
|
out 0c2h
|
|
cpi 20h
|
|
lxi h,X0970
|
|
jnz X035e
|
|
lxi h,X0370
|
|
X035e: shld X2001
|
|
lda X21a8
|
|
ani 10h
|
|
rz
|
|
mov a,b
|
|
out 0c2h
|
|
ret
|
|
|
|
X036b: lda X21a6
|
|
ani 20h
|
|
X0370: jnz X0375
|
|
mvi a,1
|
|
X0375: ori 0ah
|
|
out 0a2h
|
|
lda X215b
|
|
ori 0ch
|
|
out 0a2h
|
|
ret
|
|
|
|
X0381: lda X21a2
|
|
ora a
|
|
jz X0b63
|
|
jmp X0b77
|
|
;;
|
|
;; memmove(0x038b): Move B bytes at DE to HL
|
|
;;
|
|
memmove:
|
|
ldax d ;; Load memory at DE into accumulator
|
|
mov m,a ;; Store it at HL
|
|
inx h ;; HL++
|
|
inx d ;; DE++
|
|
dcr b ;; B--
|
|
jnz memmove ;; until B is zero
|
|
ret
|
|
|
|
X0394: lda X21a5
|
|
ora a
|
|
mvi a,1
|
|
jnz X039f
|
|
mvi a,5
|
|
X039f: jmp X1f7b
|
|
|
|
X03a2: call X0381
|
|
call X1ddb
|
|
call X036b
|
|
jmp X0342
|
|
|
|
X03ae: call X1488
|
|
call X0587
|
|
lxi h,X2177
|
|
mov a,m
|
|
ora a
|
|
mvi m,0
|
|
cnz X1a20
|
|
lda X21a5
|
|
ora a
|
|
jz X03ae
|
|
xra a
|
|
sta X2144
|
|
jmp X03ae
|
|
;;
|
|
;; Receiver interrupt handler
|
|
;;
|
|
X03cc: push psw
|
|
push b
|
|
push h
|
|
in 0 ;; Read from PUSART data
|
|
ani 7fh
|
|
jz X043a
|
|
mov c,a
|
|
lda X21a5
|
|
ora a
|
|
jnz X043a
|
|
in 1 ;; Read from PUSART ctrl
|
|
ani 38h
|
|
jz X03ed
|
|
mvi c,1ah
|
|
mvi a,27h
|
|
ori 10h
|
|
out 1
|
|
X03ed: mov a,c
|
|
cpi 7fh
|
|
jz X0437
|
|
lda X21a7
|
|
ani 10h
|
|
mov a,c
|
|
jz X0409
|
|
lxi h,X21c2
|
|
cpi 11h
|
|
jz X043e
|
|
cpi 13h
|
|
jz X0444
|
|
X0409: lxi h,X20c0
|
|
mov c,m
|
|
mov b,h
|
|
stax b
|
|
mov a,c
|
|
inr a
|
|
ani 0bfh
|
|
mov m,a
|
|
mov b,a
|
|
lda X20c1
|
|
sub b
|
|
jnz X0427
|
|
mov m,c
|
|
mov a,b
|
|
inr a
|
|
ani 0bfh
|
|
mov l,a
|
|
mvi m,1ah
|
|
jmp X0431
|
|
|
|
X0427: jp X042c
|
|
adi 40h
|
|
X042c: cpi 20h
|
|
jnz X0437
|
|
X0431: lxi b,X0113
|
|
call X0f7e
|
|
X0437: call X0e47
|
|
X043a: pop h
|
|
pop b
|
|
pop psw
|
|
ret
|
|
;;
|
|
;; End of keyboard interrupt handler
|
|
;;
|
|
X043e: mvi a,0feh
|
|
ana m
|
|
jmp X0447
|
|
|
|
X0444: mvi a,1
|
|
ora m
|
|
X0447: mov m,a
|
|
jmp X0437
|
|
|
|
X044b: db 30h
|
|
dad h
|
|
lxi sp,X3221
|
|
mov b,b
|
|
inx sp
|
|
inx h
|
|
inr m
|
|
inr h
|
|
dcr m
|
|
dcr h
|
|
mvi m,5eh
|
|
stc
|
|
mvi h,38h
|
|
lhld X2839
|
|
dcr l
|
|
mov e,a
|
|
dcr a
|
|
dcx h
|
|
mov h,b
|
|
mov a,m
|
|
mov e,e
|
|
mov a,e
|
|
mov e,l
|
|
mov a,l
|
|
dcx sp
|
|
lda X3f2f
|
|
daa
|
|
shld X3c2c
|
|
mvi l,3eh
|
|
mov e,h
|
|
mov a,h
|
|
db 20h
|
|
X0476:
|
|
KBTab: db 20h, 7fh, 7fh, 7fh, 00h, 'p', 'o', 'y', 't', 'w', 'q'
|
|
db 0c3h, 00h, 00h, 00h, ']', '[', 'i', 'u', 'r', 'e', '1'
|
|
db 0c4h, 00h, 0c2h, 081h, '`', '-', '9', '7', '4', '3', 1bh
|
|
db 0c1h, 0d2h, 0d0h, 08h, '=', '0', '8', '6', '5', '2', 09h
|
|
db 0b7h, 0d3h, 0d1h, 0b0h, 0ah, '\', 'l', 'k', 'g', 'f', 'a'
|
|
db 0b8h, 8dh, 0b2h, 0b1h, 00h, 27h, 3bh, 'j', 'h', 'd', 's'
|
|
db 0aeh, 0ach, 0b5h, 0b4h, 0dh, '.', ',', 'n', 'b', 'x', 82h
|
|
db 0b9h, 0b3h, 0b6h, 0adh, 00h, '/', 'm', ' ', 'v', 'c', 'z'
|
|
rst 7
|
|
;;
|
|
;; Vertical interrupt handler
|
|
;;
|
|
X04cf: push psw
|
|
push h
|
|
push d
|
|
call X104e
|
|
push b
|
|
mvi a,9
|
|
out 0a2h
|
|
ei
|
|
lda X2065
|
|
ora a
|
|
jnz X050b
|
|
lxi h,X2051
|
|
ora m
|
|
jz X053e
|
|
mvi a,1
|
|
sta X2065
|
|
ora m
|
|
mvi m,0
|
|
mvi a,1
|
|
sta X205b
|
|
lda X2156
|
|
jp X0505
|
|
mvi a,99h
|
|
sta X205b
|
|
lda X2155
|
|
dcr a
|
|
X0505: call X122f
|
|
sta X207a
|
|
X050b: lxi b,X205b
|
|
ldax b
|
|
lxi h,X205a
|
|
add m
|
|
daa
|
|
ani 0fh
|
|
mov m,a
|
|
mov d,a
|
|
ani 3
|
|
out 0a2h
|
|
mov a,d
|
|
rar
|
|
ana a
|
|
rar
|
|
ori 4
|
|
out 0a2h
|
|
mov a,d
|
|
ora a
|
|
jnz X053e
|
|
sta X2065
|
|
ldax b
|
|
ora a
|
|
lda X2156
|
|
jm X0538
|
|
lda X2155
|
|
dcr a
|
|
X0538: call X11ce
|
|
sta X207a
|
|
X053e: lxi h,X2078
|
|
mov a,m
|
|
ora a
|
|
jz X054f
|
|
dcr m
|
|
ani 4
|
|
rrc
|
|
rrc
|
|
rrc
|
|
sta X2146
|
|
X054f: lxi h,X212c
|
|
mov a,m
|
|
dcr a
|
|
jnz X0569
|
|
mvi m,35h
|
|
mvi a,8
|
|
out 0a2h
|
|
lxi h,X21cb
|
|
mov a,m
|
|
ora a
|
|
jz X056a
|
|
out 0a2h
|
|
xri 1
|
|
X0569: mov m,a
|
|
X056a: mvi a,40h
|
|
sta X2148
|
|
lxi h,X207f
|
|
inr m
|
|
lda X21a3
|
|
out 42h
|
|
lda X2158
|
|
out 2
|
|
lda X21c9
|
|
out 62h
|
|
pop b
|
|
pop d
|
|
pop h
|
|
pop psw
|
|
ret
|
|
|
|
X0587: lda X21a5
|
|
lxi h,X207b
|
|
ora m
|
|
rnz
|
|
call X0675
|
|
rz
|
|
X0593: mov b,a
|
|
lda X207b
|
|
ora a
|
|
mov a,b
|
|
jnz X05a9
|
|
lda X2079
|
|
rlc
|
|
mov a,b
|
|
jc X05a9
|
|
cpi 20h
|
|
jc X08b2
|
|
X05a9: lhld X2140
|
|
pchl
|
|
|
|
X05ad: cpi 1bh
|
|
jnz X05cc
|
|
lxi h,X05b8
|
|
jmp X0a18
|
|
|
|
X05b8: cpi 32h
|
|
jnz X05c5
|
|
mvi a,1
|
|
sta X2079
|
|
jmp X0a15
|
|
|
|
X05c5: mov b,a
|
|
mvi a,1bh
|
|
call X05d2
|
|
mov a,b
|
|
X05cc: call X05d2
|
|
jmp X0c62
|
|
|
|
X05d2: mov c,a
|
|
X05d3: push b
|
|
call X1488
|
|
pop b
|
|
in 42h
|
|
ani 4
|
|
jnz X05d3
|
|
mov a,c
|
|
out 0e2h
|
|
ret
|
|
|
|
X05e3: call X0c46
|
|
X05e6: push psw
|
|
cpi 7fh
|
|
jz X0673
|
|
push h
|
|
push d
|
|
push b
|
|
mov c,a
|
|
lxi h,X20fc
|
|
mov d,m
|
|
inx h
|
|
mov a,d
|
|
add l
|
|
mov l,a
|
|
mov a,d
|
|
sui 2
|
|
jp X05ff
|
|
mov a,d
|
|
X05ff: sta X20fc
|
|
mov d,m
|
|
lda X20fa
|
|
ora d
|
|
mov b,a
|
|
mov a,d
|
|
rlc
|
|
mov a,c
|
|
jnc X0616
|
|
sui 5fh
|
|
cpi 20h
|
|
jnc X0616
|
|
mov c,a
|
|
X0616: mov a,d
|
|
ani 40h
|
|
mov a,c
|
|
jz X0624
|
|
cpi 23h
|
|
jnz X0624
|
|
mvi c,1eh
|
|
X0624: lda X20fb
|
|
ora c
|
|
mov c,a
|
|
lda X2142
|
|
ora a
|
|
jz X0641
|
|
lxi h,X20f8
|
|
lda X2153
|
|
cmp m
|
|
jnz X0641
|
|
mvi m,0
|
|
push b
|
|
call X0955
|
|
pop b
|
|
X0641: lhld cursor_address
|
|
mov m,c
|
|
mov a,h
|
|
adi 10h
|
|
mov h,a
|
|
mov m,b
|
|
mov a,b
|
|
sta X20f5
|
|
lxi h,X20f4
|
|
mov m,c
|
|
lxi h,X20f8
|
|
lda X2153
|
|
cmp m
|
|
jnz X0668
|
|
mov a,c
|
|
sta X20f4
|
|
lda X21a8
|
|
ani 40h
|
|
jmp X066d
|
|
|
|
X0668: inr m
|
|
call X1636
|
|
xra a
|
|
X066d: sta X2142
|
|
X0670: pop b
|
|
pop d
|
|
pop h
|
|
X0673: pop psw
|
|
ret
|
|
|
|
X0675: lda X21c4
|
|
ora a
|
|
jnz X0685
|
|
lxi h,X20c0
|
|
mov a,m
|
|
inx h
|
|
sub m
|
|
jnz X0687
|
|
X0685: xra a
|
|
ret
|
|
|
|
X0687: mov l,m
|
|
mvi h,20h
|
|
mov d,m
|
|
lxi h,X20c1
|
|
mov a,m
|
|
inr a
|
|
ani 0bfh
|
|
ori 80h
|
|
mov m,a
|
|
dcx h
|
|
sub m
|
|
jp X069c
|
|
adi 40h
|
|
X069c: cpi 30h
|
|
jnz X06a7
|
|
lxi b,X0111
|
|
call X0f7e
|
|
X06a7: mov a,d
|
|
ora a
|
|
ret
|
|
|
|
X06aa: lda key_flags ; A <- [Keys flag buffer]
|
|
mov e,a
|
|
ani 80h ; bit 7 set?
|
|
rz ; return if not
|
|
lxi h,X0841
|
|
push h
|
|
mov a,e
|
|
ani 7
|
|
cpi 4
|
|
jm X06c2
|
|
xra a
|
|
sta X2067
|
|
ret
|
|
|
|
X06c2: mov d,a
|
|
mvi c,0
|
|
mvi b,4
|
|
lxi h,key_buffer+4
|
|
X06ca: mov a,m
|
|
ora a
|
|
jz X06e8
|
|
push h
|
|
push b
|
|
mvi b,3
|
|
lxi h,key_buffer
|
|
X06d6: cmp m
|
|
jz X06df
|
|
inx h
|
|
dcr b
|
|
jp X06d6
|
|
X06df: pop b
|
|
pop h
|
|
jz X06e7
|
|
mvi m,0
|
|
dcr c
|
|
X06e7: inr c
|
|
X06e8: inx h
|
|
dcr b
|
|
jnz X06ca
|
|
mov a,e
|
|
ani 8
|
|
rnz
|
|
ora d
|
|
jnz X06fb
|
|
mvi a,0e1h
|
|
sta X2072
|
|
ret
|
|
|
|
X06fb: lxi h,X0747
|
|
push h
|
|
lda X2072
|
|
inr a
|
|
jz X0709
|
|
sta X2072
|
|
X0709: lda X21a6
|
|
ani 40h
|
|
rz
|
|
mov a,e
|
|
ani 10h
|
|
rnz
|
|
lda X2150
|
|
lxi h,X085f
|
|
mvi b,5
|
|
X071b: cmp m
|
|
rz
|
|
inx h
|
|
dcr b
|
|
jnz X071b
|
|
lxi h,X2073
|
|
dcr m
|
|
rnz
|
|
mvi m,2
|
|
lda X2072
|
|
cpi 0ffh
|
|
rnz
|
|
mov a,c
|
|
cpi 1
|
|
rnz
|
|
mvi b,4
|
|
lxi h,key_buffer+4
|
|
X0738: mov a,m
|
|
ora a
|
|
jnz X0743
|
|
inx h
|
|
dcr b
|
|
jnz X0738
|
|
ret
|
|
|
|
X0743: pop h
|
|
jmp X0776
|
|
|
|
X0747: mov a,c
|
|
cpi 4
|
|
rp
|
|
lxi b,key_buffer
|
|
X074e: lxi h,key_buffer+4
|
|
X0751: mov a,m
|
|
ora a
|
|
jz X075b
|
|
ldax b
|
|
cmp m
|
|
jz X0766
|
|
X075b: inx h
|
|
mov a,l
|
|
cpi 72h
|
|
jnz X0751
|
|
ldax b ; A = key (loaded from BC, typically 0x206a)
|
|
jmp X076c
|
|
|
|
X0766: inx b
|
|
dcr d
|
|
jnz X074e
|
|
ret
|
|
|
|
X076c: mov b,a
|
|
lda X2067
|
|
cmp b
|
|
mov a,b
|
|
sta X2067
|
|
rnz
|
|
X0776: pop h
|
|
sta X2150
|
|
cpi 7bh
|
|
jz X1a1a
|
|
cpi 6ah
|
|
jz X022c
|
|
mov b,e
|
|
mov e,a
|
|
lda X2144
|
|
ora a
|
|
jnz X0841
|
|
mov a,e
|
|
ani 0f0h
|
|
rrc
|
|
rrc
|
|
mov d,a
|
|
rrc
|
|
rrc
|
|
add d
|
|
mov d,a
|
|
mov a,e
|
|
sub d
|
|
lxi h,X0476
|
|
mov e,a
|
|
mvi d,0
|
|
dad d
|
|
mov c,m
|
|
mov a,c
|
|
ora a
|
|
jm X0131
|
|
cpi 20h
|
|
jc X07ff
|
|
mov a,b
|
|
ani 70h
|
|
jz X07ff
|
|
mov a,c
|
|
cpi 7bh
|
|
jnc X07c2
|
|
cpi 61h
|
|
jc X07c2
|
|
ani 0dfh
|
|
mov c,a
|
|
jmp X07d7
|
|
|
|
X07c2: mov a,b
|
|
ani 30h
|
|
jz X07d7
|
|
lxi h,X044b
|
|
X07cb: mov a,m
|
|
cmp c
|
|
jz X07d5
|
|
inx h
|
|
inx h
|
|
jmp X07cb
|
|
|
|
X07d5: inx h
|
|
mov c,m
|
|
X07d7: mov a,b
|
|
ani 10h
|
|
jz X07ff
|
|
mov a,c
|
|
cpi 41h
|
|
jc X07e8
|
|
cpi 5bh
|
|
jc X07fc
|
|
X07e8: cpi 3fh
|
|
jz X07fc
|
|
cpi 20h
|
|
jz X07fc
|
|
cpi 7bh
|
|
jc X0841
|
|
cpi 7fh
|
|
jnc X0841
|
|
X07fc: ani 9fh
|
|
mov c,a
|
|
X07ff: ora c
|
|
push psw
|
|
lda X21a7
|
|
ani 80h
|
|
jz X080c
|
|
sta X2154
|
|
X080c: pop psw
|
|
X080d: ori 80h
|
|
call X0f18
|
|
X0812: call X0853
|
|
X0815: lda X2150
|
|
mvi d,4
|
|
lxi h,key_buffer+4
|
|
X081d: cmp m
|
|
jz X0841
|
|
inx h
|
|
dcr d
|
|
jnz X081d
|
|
mvi d,4
|
|
lxi h,key_buffer+4
|
|
X082b: mov a,m
|
|
ora a
|
|
jz X0838
|
|
inx h
|
|
dcr d
|
|
jnz X082b
|
|
jmp X0841
|
|
|
|
X0838: lda X2150
|
|
mov m,a
|
|
mvi a,0e1h
|
|
sta X2072
|
|
X0841: xra a
|
|
lxi h,key_flags
|
|
mov d,m
|
|
mov m,a
|
|
inx h
|
|
mov m,d
|
|
inx h
|
|
mvi d,4
|
|
X084c: mov m,a
|
|
inx h
|
|
dcr d
|
|
jnz X084c
|
|
ret
|
|
|
|
X0853: lda X21a7
|
|
ani 40h
|
|
rz
|
|
mvi a,80h
|
|
sta X2147
|
|
ret
|
|
|
|
X085f: mov a,e
|
|
lhld X3a6a
|
|
mov h,h
|
|
lda X2130
|
|
sui 2
|
|
rnz
|
|
mov d,a
|
|
lda X2131
|
|
mov e,a
|
|
X086f: mvi a,1
|
|
ana e
|
|
jnz X003d
|
|
X0875: mov a,d
|
|
ora a
|
|
cnz X08a7
|
|
push d
|
|
call X17be
|
|
pop d
|
|
mvi a,2
|
|
ana e
|
|
cnz X1f11
|
|
mvi a,8
|
|
cc X08a7
|
|
mvi a,4
|
|
ana e
|
|
cnz X1f62
|
|
mvi a,10h
|
|
cc X08a7
|
|
mov a,d
|
|
ora a
|
|
jnz X08a0
|
|
mvi a,8
|
|
ana e
|
|
jnz X086f
|
|
X08a0: mov a,d
|
|
sta 2000h
|
|
jmp X0251
|
|
|
|
X08a7: ora d
|
|
mov d,a
|
|
mvi a,8
|
|
ana e
|
|
rz
|
|
mvi a,80h
|
|
ora d
|
|
mov d,a
|
|
ret
|
|
|
|
X08b2: cpi 1bh
|
|
jz X099e
|
|
cpi 10h
|
|
jc X08d4
|
|
mov e,a
|
|
sui 18h
|
|
ani 0fdh
|
|
rnz
|
|
mov a,e
|
|
cpi 1ah
|
|
jz X08cb
|
|
cpi 18h
|
|
rnz
|
|
X08cb: call X0a15
|
|
mvi a,2
|
|
X08d0: jmp X05e6
|
|
|
|
ret
|
|
|
|
X08d4: sui 5 ;; subtract 5 from A and return if negative
|
|
rm
|
|
lxi h,X08e5 ;; load jump table at 8e5
|
|
add a ;; double a
|
|
mov e,a
|
|
mvi d,0
|
|
dad d ;; hl = X08e5 + 2A
|
|
mov e,m ;; load DE from (HL) little-endian
|
|
inx h
|
|
mov d,m
|
|
xchg
|
|
xra a ;; zero A
|
|
pchl ;; jump to address
|
|
|
|
X08e5: dw X0900
|
|
dw X0997 ;; immediate return
|
|
dw X0938
|
|
dw X0941
|
|
dw 0df9h ;; MYSTERY ADDRESS: this isn't even in AVO!!!
|
|
dw X0955
|
|
dw X0955
|
|
dw X0955
|
|
dw 094bh
|
|
dw X08fb
|
|
dw X08fc
|
|
|
|
X08fb: inr a
|
|
X08fc: sta X20fc
|
|
ret
|
|
|
|
X0900: lda X21a5
|
|
ora a
|
|
rnz
|
|
lhld X217b
|
|
mov a,h
|
|
cmp l
|
|
rz
|
|
lxi h,X2172
|
|
mvi a,10h
|
|
ora m
|
|
mov m,a
|
|
ret
|
|
|
|
lxi h,X2172
|
|
mov a,m
|
|
ani 0efh
|
|
mov m,a
|
|
lxi h,X217b
|
|
mov b,m
|
|
inx h
|
|
mvi c,14h
|
|
lxi d,X215c
|
|
X0924: mov a,m
|
|
cmp b
|
|
jz X0930
|
|
stax d
|
|
inx d
|
|
inx h
|
|
dcr c
|
|
jnz X0924
|
|
X0930: dcx d
|
|
ldax d
|
|
ori 80h
|
|
stax d
|
|
jmp X0ef3
|
|
|
|
X0938: lxi h,X2078
|
|
mov a,m
|
|
adi 8
|
|
rc
|
|
mov m,a
|
|
ret
|
|
|
|
X0941: lxi h,X20f8
|
|
mov a,m
|
|
ora a
|
|
rz
|
|
dcr m
|
|
jmp X1636
|
|
|
|
X094b: xra a
|
|
sta X20f8
|
|
jmp X1636
|
|
|
|
call X094b
|
|
X0955: lda X21a8
|
|
ani 20h
|
|
cnz X094b
|
|
lxi h,X20f9
|
|
mov d,m
|
|
lda X2156
|
|
cmp d
|
|
jz X0973
|
|
call X11bf
|
|
mov a,b
|
|
cmp d
|
|
rz
|
|
inr d
|
|
mov m,d
|
|
X0970: jmp X1636
|
|
|
|
X0973: lda X21a6
|
|
ani 80h
|
|
jz X0998
|
|
mvi c,1
|
|
call X108e
|
|
mvi a,0ffh
|
|
sta X21c3
|
|
inr m
|
|
call X0fe6
|
|
X0989: lda X21c3
|
|
ora a
|
|
jnz X0989
|
|
sta X20f4
|
|
dcr a
|
|
sta X20f5
|
|
X0997: ret
|
|
|
|
X0998: call X101a
|
|
jmp X1012
|
|
|
|
X099e: xra a
|
|
sta X207d
|
|
sta X21b8
|
|
lxi h,X09ab
|
|
jmp X0a18
|
|
|
|
X09ab: cpi 30h
|
|
jnc X09bd
|
|
lxi h,X207d
|
|
mov c,a
|
|
mov a,m
|
|
ora a
|
|
jz X09bb
|
|
mvi c,0ffh
|
|
X09bb: mov m,c
|
|
ret
|
|
|
|
X09bd: sta X207e
|
|
lxi h,X0a15
|
|
push h
|
|
lda X207d
|
|
ora a
|
|
jnz X09dc
|
|
lda X21a7
|
|
ani 20h
|
|
lxi h,X0a50
|
|
jnz X09d9
|
|
lxi h,X0a1c
|
|
X09d9: jmp X09f7
|
|
|
|
X09dc: mov b,a
|
|
lda X21a7
|
|
ani 20h
|
|
mov a,b
|
|
rz
|
|
cpi 28h
|
|
lxi d,X20fd
|
|
jz X0c32
|
|
cpi 29h
|
|
jz X0c31
|
|
cpi 23h
|
|
lxi h,X0a7b
|
|
rnz
|
|
X09f7: lxi d,X21b9
|
|
xra a
|
|
stax d
|
|
lda X207e
|
|
X09ff: mov c,a
|
|
X0a00: xra a
|
|
add m
|
|
rz
|
|
inx h
|
|
cmp c
|
|
jz X0a0d
|
|
inx h
|
|
inx h
|
|
jmp X0a00
|
|
|
|
X0a0d: stax d
|
|
mov a,m
|
|
inx h
|
|
mov h,m
|
|
mov l,a
|
|
xra a
|
|
pchl
|
|
|
|
X0a14: pop h
|
|
X0a15: lxi h,X05e6 ;; HL = 0x05e6
|
|
X0a18: shld X2140 ;; 0x2140 = 0xe605
|
|
ret
|
|
;;
|
|
;; This is a table of some sort.
|
|
;;
|
|
X0a1c: mov b,c
|
|
sbb e
|
|
ldax b
|
|
mov b,d
|
|
sbb e
|
|
ldax b
|
|
mov b,e
|
|
sbb e
|
|
ldax b
|
|
mov b,h
|
|
sbb e
|
|
ldax b
|
|
mov b,m
|
|
ldax b
|
|
inr c
|
|
mov b,a
|
|
rrc
|
|
inr c
|
|
mov c,b
|
|
sub m
|
|
ldax b
|
|
mov c,c
|
|
ana e
|
|
dcx b
|
|
mov c,d
|
|
sbb e
|
|
ldax b
|
|
mov c,e
|
|
sbb e
|
|
ldax b
|
|
mov e,c
|
|
lxi d,X5a0b
|
|
adi 0ch
|
|
dcr a
|
|
rst 3
|
|
dcx b
|
|
mvi a,0e5h
|
|
dcx b
|
|
lxi sp,X0c57
|
|
inr a
|
|
xchg
|
|
dcx b
|
|
mov e,l
|
|
mov h,b
|
|
dcr c
|
|
nop
|
|
X0a50: mov h,e
|
|
nop
|
|
nop
|
|
mov b,l
|
|
mov d,d
|
|
dad b
|
|
mov c,l
|
|
ana e
|
|
dcx b
|
|
lxi sp,X0c57
|
|
mov e,e
|
|
adc m
|
|
ldax b
|
|
mov c,b
|
|
rst 3
|
|
dcr c
|
|
mov b,h
|
|
mov d,l
|
|
dad b
|
|
stc
|
|
mov l,b
|
|
inr c
|
|
db 38h
|
|
mov m,c
|
|
inr c
|
|
dcr a
|
|
rst 3
|
|
dcx b
|
|
mvi a,0e5h
|
|
dcx b
|
|
mov e,d
|
|
adi 0ch
|
|
mov c,m
|
|
mov b,m
|
|
inr c
|
|
mov c,a
|
|
mov b,m
|
|
inr c
|
|
nop
|
|
X0a7b: inx sp
|
|
xra b
|
|
stax d
|
|
inr m
|
|
xra h
|
|
stax d
|
|
dcr m
|
|
mov c,d
|
|
inx d
|
|
mvi m,0a4h
|
|
stax d
|
|
stc
|
|
mov h,b
|
|
dcr c
|
|
db 38h
|
|
ana a
|
|
dcr c
|
|
nop
|
|
lxi h,X16c2
|
|
shld X2140
|
|
pop h
|
|
ret
|
|
|
|
mvi a,48h
|
|
sta X207e
|
|
lxi h,0
|
|
shld X2130
|
|
pop h
|
|
X0aa2: lxi h,X0a15
|
|
push h
|
|
lda X207d
|
|
ora a
|
|
rnz
|
|
lxi h,X0ad9
|
|
call X09f7
|
|
lda X21b9
|
|
ora a
|
|
rnz
|
|
lxi h,X2130
|
|
lda X214b
|
|
ora a
|
|
mov e,a
|
|
jnz X0ac2
|
|
inr e
|
|
X0ac2: mov a,m
|
|
push h
|
|
push d
|
|
lxi h,X0af5
|
|
mov b,a
|
|
call X09f7
|
|
pop d
|
|
pop h
|
|
lda X21b9
|
|
ora a
|
|
rz
|
|
inx h
|
|
dcr e
|
|
jnz X0ac2
|
|
ret
|
|
|
|
X0ad9: mov b,h
|
|
mvi e,18h
|
|
mov b,d
|
|
rlc
|
|
db 18h
|
|
mov b,e
|
|
dcr d
|
|
db 18h
|
|
mov c,b
|
|
mov d,e
|
|
db 18h
|
|
mov b,c
|
|
cpi 17h
|
|
mov m,d
|
|
ana m
|
|
dcr d
|
|
mov h,m
|
|
mov d,e
|
|
db 18h
|
|
mov a,b
|
|
rst 3
|
|
stax d
|
|
mov a,c
|
|
mov h,h
|
|
db 8
|
|
nop
|
|
X0af5: mov h,e
|
|
pop b
|
|
inr c
|
|
mov m,c
|
|
mvi d,0ch
|
|
mov l,m
|
|
inx b
|
|
dcr c
|
|
mov c,d
|
|
mov b,c
|
|
dcr d
|
|
mov c,e
|
|
cm X6c14
|
|
db 0edh
|
|
inx d
|
|
mov l,l
|
|
mov a,a
|
|
inr c
|
|
mov l,b
|
|
jp X6713
|
|
rst 1
|
|
dcr c
|
|
nop
|
|
lxi h,X0b19
|
|
shld X2140
|
|
pop h
|
|
ret
|
|
|
|
X0b19: mov b,a
|
|
cpi 20h
|
|
jc X08b2
|
|
cpi 1bh
|
|
lxi h,X2151
|
|
jnz X0b2e
|
|
lxi h,X09ab
|
|
shld X2140
|
|
ret
|
|
|
|
X0b2e: mov a,m
|
|
ora a
|
|
jnz X0b42
|
|
mvi m,1
|
|
mov a,b
|
|
sui 20h
|
|
sta X2152
|
|
lxi h,X0b19
|
|
shld X2140
|
|
ret
|
|
|
|
X0b42: mvi m,0
|
|
mov a,b
|
|
sui 20h
|
|
cpi 50h
|
|
jnc X0b4f
|
|
sta X20f8
|
|
X0b4f: call X11bf
|
|
lda X2152
|
|
inr b
|
|
cmp b
|
|
jnc X0b5d
|
|
sta X20f9
|
|
X0b5d: call X0a15
|
|
jmp X1636
|
|
|
|
X0b63: xra a
|
|
sta X21a2
|
|
call X10ad
|
|
mvi c,50h
|
|
call X10f9
|
|
call X114c
|
|
mvi c,50h
|
|
jmp X0b89
|
|
|
|
X0b77: mvi a,1
|
|
sta X21a2
|
|
call X10ad
|
|
mvi c,84h
|
|
call X10f9
|
|
call X114c
|
|
mvi c,84h
|
|
X0b89: xra a
|
|
sta X2155
|
|
call X11bf
|
|
mov a,b
|
|
sta X2156
|
|
mov a,c
|
|
sta X2050
|
|
call X0342
|
|
call X1848
|
|
mvi a,1
|
|
jmp X0faa
|
|
|
|
lxi h,X20f9
|
|
lda X2155
|
|
mov b,a
|
|
mov a,m
|
|
cmp b
|
|
jz X0bb8
|
|
ora a
|
|
rz
|
|
lxi h,X20f9
|
|
dcr m
|
|
jmp X1636
|
|
|
|
X0bb8: lda X21a6
|
|
ani 80h
|
|
jz X0bd9
|
|
mvi c,1
|
|
call X108e
|
|
mvi a,0ffh
|
|
sta X21c3
|
|
dcr m
|
|
call X0feb
|
|
X0bce: lda X21c3
|
|
ora a
|
|
jnz X0bce
|
|
sta X20f4
|
|
ret
|
|
|
|
X0bd9: call X102d
|
|
jmp X1012
|
|
|
|
lxi h,X2178
|
|
mvi m,1
|
|
ret
|
|
|
|
lxi h,X2178
|
|
mvi m,0
|
|
ret
|
|
|
|
lxi h,X21a7
|
|
mov a,m
|
|
ori 20h
|
|
mov m,a
|
|
X0bf2: lda X21a8
|
|
ani 80h
|
|
mvi h,8
|
|
jz X0bfe
|
|
mvi h,48h
|
|
X0bfe: mov l,h
|
|
shld X20fd
|
|
shld X20ff
|
|
xra a
|
|
sta X20fc
|
|
ret
|
|
|
|
mvi h,88h
|
|
jmp X0c11
|
|
|
|
mvi h,8
|
|
X0c11: mov l,h
|
|
shld X20fd
|
|
ret
|
|
|
|
lxi h,X2145
|
|
mov a,b
|
|
ora a
|
|
jnz X0c23
|
|
mov a,m
|
|
ani 0f0h
|
|
mov m,a
|
|
ret
|
|
|
|
X0c23: sui 5
|
|
rp
|
|
mov b,a
|
|
xra a
|
|
stc
|
|
X0c29: ral
|
|
inr b
|
|
jnz X0c29
|
|
ora m
|
|
mov m,a
|
|
ret
|
|
|
|
X0c31: inx d
|
|
X0c32: lda X207e
|
|
mov b,a
|
|
lxi h,X0c4a
|
|
X0c39: inx h
|
|
inx h
|
|
mov a,m
|
|
ora a
|
|
rz
|
|
cmp b
|
|
jnz X0c39
|
|
inx h
|
|
mov a,m
|
|
stax d
|
|
ret
|
|
|
|
X0c46: lxi h,X20fc
|
|
inr m
|
|
X0c4a: inr m
|
|
ret
|
|
|
|
mov b,c
|
|
mov c,b
|
|
mov b,d
|
|
db 8
|
|
db 30h
|
|
adc b
|
|
lxi sp,X3200
|
|
add b
|
|
nop
|
|
X0c57: lxi h,X2079
|
|
mov a,m
|
|
ora a
|
|
jz X0a14
|
|
mvi m,81h
|
|
pop h
|
|
X0c62: lxi h,X05ad
|
|
jmp X0a18
|
|
|
|
lxi h,X2102
|
|
lxi d,X20f8
|
|
jmp X0c77
|
|
|
|
lxi h,X20f8
|
|
lxi d,X2102
|
|
X0c77: mvi b,0bh
|
|
call memmove
|
|
jmp X1636
|
|
|
|
lxi h,X0c8a
|
|
mov a,b
|
|
ora a
|
|
jz X0c97
|
|
jmp X09ff
|
|
|
|
X0c8a: lxi b,X0ca2
|
|
inr b
|
|
ana a
|
|
inr c
|
|
dcr b
|
|
ora e
|
|
inr c
|
|
rlc
|
|
cmp e
|
|
inr c
|
|
nop
|
|
X0c97: sta X20fb
|
|
lxi h,X20fa
|
|
mov a,m
|
|
ori 0f7h
|
|
mov m,a
|
|
ret
|
|
|
|
X0ca2: mvi a,0fbh
|
|
jmp X0cb5
|
|
|
|
lda X21c8
|
|
ora a
|
|
jnz X0cbb
|
|
mvi a,0fdh
|
|
jmp X0cb5
|
|
|
|
mvi a,0feh
|
|
X0cb5: lxi h,X20fa
|
|
ana m
|
|
mov m,a
|
|
ret
|
|
|
|
X0cbb: mvi a,80h
|
|
sta X20fb
|
|
ret
|
|
|
|
lda X2130
|
|
ora a
|
|
rnz
|
|
lxi h,X2172
|
|
mov a,m
|
|
ori 4
|
|
mov m,a
|
|
ret
|
|
|
|
mvi a,0fbh
|
|
call X0dbf
|
|
lda X21a7
|
|
ani 20h
|
|
jnz X0ce3
|
|
mvi m,0dah
|
|
dcx h
|
|
mvi m,2fh
|
|
jmp X0ef3
|
|
|
|
X0ce3: mvi m,3fh
|
|
inx h
|
|
mvi a,31h
|
|
call X0db9
|
|
in 42h
|
|
mov b,a
|
|
cma
|
|
ani 6
|
|
mov c,a
|
|
mov a,b
|
|
ani 8
|
|
jz X0cf9
|
|
inr c
|
|
X0cf9: mov a,c
|
|
ori 30h
|
|
mov m,a
|
|
inx h
|
|
mvi m,0e3h
|
|
jmp X0ef3
|
|
|
|
lda X21b8
|
|
ora a
|
|
rnz
|
|
mov a,b
|
|
lxi h,X2172
|
|
cpi 6
|
|
jz X0d32
|
|
cpi 5
|
|
rnz
|
|
mov a,m
|
|
ori 8
|
|
mov m,a
|
|
ret
|
|
|
|
mvi a,0f7h
|
|
call X0dbf
|
|
mvi b,3
|
|
lda X21bd
|
|
ora a
|
|
mov a,b
|
|
jnz X0d29
|
|
xra a
|
|
X0d29: ori 30h
|
|
mov m,a
|
|
inx h
|
|
mvi m,0eeh
|
|
X0d2f: jmp X0ef3
|
|
|
|
X0d32: mov a,m
|
|
ori 1
|
|
mov m,a
|
|
ret
|
|
|
|
mvi a,0feh
|
|
call X0dbf
|
|
lda X20f9
|
|
mov b,a
|
|
lda X2101
|
|
ora a
|
|
jz X0d4a
|
|
lda X2155
|
|
X0d4a: mov c,a
|
|
mov a,b
|
|
sub c
|
|
inr a
|
|
call X0d7a
|
|
call X0dbb
|
|
lda X20f8
|
|
inr a
|
|
call X0d7a
|
|
mvi m,0d2h
|
|
jmp X0ef3
|
|
|
|
in 42h
|
|
ani 4
|
|
rnz
|
|
mvi c,81h
|
|
call X108e
|
|
mvi a,0ffh
|
|
out 0e2h
|
|
nop
|
|
X0d6f: call X1488
|
|
in 42h
|
|
ani 4
|
|
jnz X0d6f
|
|
ret
|
|
|
|
X0d7a: mov e,a
|
|
mvi d,30h
|
|
mvi c,64h
|
|
call X0d99
|
|
jz X0d88
|
|
mov m,a
|
|
inx h
|
|
dcr d
|
|
X0d88: mvi c,0ah
|
|
call X0d99
|
|
jz X0d93
|
|
dcr d
|
|
mov m,a
|
|
inx h
|
|
X0d93: mov a,e
|
|
ori 30h
|
|
mov m,a
|
|
inx h
|
|
ret
|
|
|
|
X0d99: mov a,e
|
|
mvi b,30h
|
|
X0d9c: inr b
|
|
sub c
|
|
jp X0d9c
|
|
add c
|
|
dcr b
|
|
mov e,a
|
|
mov a,b
|
|
cmp d
|
|
ret
|
|
|
|
mvi a,45h
|
|
sta X21c7
|
|
call X0381
|
|
mvi a,45h
|
|
sta X20f4
|
|
xra a
|
|
sta X21c7
|
|
ret
|
|
|
|
X0db9: mov m,a
|
|
inx h
|
|
X0dbb: mvi m,3bh
|
|
inx h
|
|
ret
|
|
|
|
X0dbf: lxi h,X2172
|
|
ana m
|
|
mov m,a
|
|
lxi h,X215c
|
|
mvi m,1bh
|
|
inx h
|
|
mvi m,5bh
|
|
inx h
|
|
ret
|
|
|
|
mov b,d
|
|
mov a,b
|
|
ora a
|
|
jnz X0dd8
|
|
call X0de5
|
|
ret
|
|
|
|
X0dd8: cpi 3
|
|
rnz
|
|
call X0dec
|
|
ret
|
|
|
|
call X0e23
|
|
ora m
|
|
mov m,a
|
|
ret
|
|
|
|
X0de5: call X0e23
|
|
cma
|
|
ana m
|
|
mov m,a
|
|
ret
|
|
|
|
X0dec: lxi h,X2191
|
|
X0def: xra a
|
|
mov m,a
|
|
inx h
|
|
mov a,l
|
|
cpi 0a2h
|
|
jnz X0def
|
|
ret
|
|
|
|
X0df9: call X0e23
|
|
X0dfc: inr c
|
|
ora a
|
|
rar
|
|
jc X0e0b
|
|
X0e02: mov d,a
|
|
ana m
|
|
mov a,d
|
|
jz X0dfc
|
|
jmp X0e15
|
|
|
|
X0e0b: inx h
|
|
mov a,l
|
|
cpi 0a2h
|
|
mvi a,80h
|
|
jnz X0e02
|
|
dcr c
|
|
X0e15: lda X2153
|
|
cmp c
|
|
jc X0e1d
|
|
mov a,c
|
|
X0e1d: sta X20f8
|
|
jmp X1636
|
|
|
|
X0e23: lda X20f8
|
|
mov c,a
|
|
X0e27: mov d,a
|
|
lxi h,X2191
|
|
X0e2b: rrc
|
|
rrc
|
|
rrc
|
|
ani 1fh
|
|
add l
|
|
mov l,a
|
|
mov a,d
|
|
ani 7
|
|
mov d,a
|
|
mvi a,80h
|
|
X0e38: dcr d
|
|
rm
|
|
rrc
|
|
jmp X0e38
|
|
|
|
X0e3e: lda X21a5
|
|
lxi h,X207b
|
|
ora m
|
|
mov b,a
|
|
rnz
|
|
X0e47: in 42h
|
|
ani 1
|
|
rz
|
|
lxi h,X21c1
|
|
mov a,m
|
|
ora a
|
|
mvi m,0
|
|
dcx h
|
|
rz
|
|
mov a,m
|
|
out 0
|
|
ret
|
|
|
|
X0e59: di
|
|
call X0e3e
|
|
ei
|
|
mov a,b
|
|
ora a
|
|
jnz X0e6d
|
|
in 42h
|
|
ani 1
|
|
rz
|
|
lda X21c2
|
|
ora a
|
|
rnz
|
|
X0e6d: lxi h,X2173
|
|
mov a,m
|
|
ora a
|
|
jz X0e79
|
|
lhld X2174
|
|
pchl
|
|
|
|
X0e79: lda X2172
|
|
ora a
|
|
rz
|
|
mvi e,0
|
|
X0e80: rar
|
|
jc X0e89
|
|
inr e
|
|
inr e
|
|
jmp X0e80
|
|
|
|
X0e89: mvi d,0
|
|
lxi h,X0e94
|
|
dad d
|
|
mov a,m
|
|
inx h
|
|
mov h,m
|
|
mov l,a
|
|
pchl
|
|
|
|
X0e94: stc
|
|
dcr c
|
|
rp
|
|
stax d
|
|
aci 0ch
|
|
dad d
|
|
dcr c
|
|
inx d
|
|
dad b
|
|
ana b
|
|
mvi c,21h
|
|
mov e,h
|
|
db 20h
|
|
mov b,m
|
|
mov d,h
|
|
mov e,l
|
|
inx d
|
|
mvi c,8
|
|
X0ea9: ldax d
|
|
mov m,a
|
|
inx h
|
|
inx d
|
|
dcr c
|
|
jnz X0ea9
|
|
lxi h,X2143
|
|
dcr m
|
|
mov a,m
|
|
mov c,a
|
|
jnz X0ec1
|
|
lxi h,X2172
|
|
mov a,m
|
|
ani 0dfh
|
|
mov m,a
|
|
X0ec1: lda X21a5
|
|
ora a
|
|
jnz X0ecf
|
|
mov a,c
|
|
cpi 5
|
|
jnc X0ed2
|
|
xra a
|
|
X0ecf: sta X2144
|
|
X0ed2: mov a,b
|
|
ani 80h
|
|
ral
|
|
cmc
|
|
rar
|
|
sta X2173
|
|
lxi h,X0ea0
|
|
shld X2174
|
|
X0ee1: mov a,b
|
|
ani 7fh
|
|
mov b,a
|
|
lda X21a5
|
|
lxi h,X207b
|
|
ora m
|
|
mov a,b
|
|
jnz X0593
|
|
out 0
|
|
ret
|
|
|
|
X0ef3: lxi h,X0f01
|
|
shld X2174
|
|
xra a
|
|
sta X2171
|
|
inr a
|
|
sta X2173
|
|
X0f01: lxi h,X2171
|
|
mov a,m
|
|
inr m
|
|
lxi h,X215c
|
|
add l
|
|
mov l,a
|
|
mov b,m
|
|
mov a,b
|
|
ora a
|
|
jp X0ee1
|
|
xra a
|
|
sta X2173
|
|
jmp X0ee1
|
|
|
|
X0f18: push h
|
|
push d
|
|
mov d,a
|
|
lda X21a7
|
|
ani 10h
|
|
jz X0f2b
|
|
mov a,d
|
|
sui 91h
|
|
ani 0fdh
|
|
jz X0f61
|
|
X0f2b: lxi h,X2172
|
|
mov a,m
|
|
ori 20h
|
|
mov m,a
|
|
X0f32: lxi h,X2143
|
|
mov a,m
|
|
inr m
|
|
lxi h,X205c
|
|
mov e,a
|
|
add l
|
|
mov l,a
|
|
mov m,d
|
|
mvi a,8dh
|
|
cmp d
|
|
jnz X0f4e
|
|
lda X21a8
|
|
ani 20h
|
|
mvi d,8ah
|
|
jnz X0f32
|
|
X0f4e: lda X21a5
|
|
ora a
|
|
jnz X0f5b
|
|
mvi a,5
|
|
cmp e
|
|
mvi a,0
|
|
rar
|
|
X0f5b: sta X2144
|
|
X0f5e: pop d
|
|
pop h
|
|
ret
|
|
|
|
X0f61: mov a,d
|
|
ani 7fh
|
|
mov d,a
|
|
lxi h,X21c1
|
|
mov a,m
|
|
ora a
|
|
jnz X0f75
|
|
dcx h
|
|
mov a,m
|
|
cmp d
|
|
jnz X0f75
|
|
inx h
|
|
mov m,d
|
|
X0f75: mov c,d
|
|
mvi b,2
|
|
call X0f7e
|
|
jmp X0f5e
|
|
|
|
X0f7e: lda X21a7
|
|
ani 10h
|
|
rz
|
|
lda X21a5
|
|
ora a
|
|
rnz
|
|
mov a,c
|
|
lxi h,X21bf
|
|
cpi 13h
|
|
mov a,b
|
|
jz X0f9e
|
|
cma
|
|
ana m
|
|
mov m,a
|
|
push psw
|
|
ani 2
|
|
sta X21c4
|
|
pop psw
|
|
rnz
|
|
X0f9e: ora m
|
|
mov m,a
|
|
mov a,c
|
|
lxi h,X21c0
|
|
cmp m
|
|
rz
|
|
mov m,a
|
|
inx h
|
|
mov m,a
|
|
ret
|
|
|
|
;
|
|
; Main loop?
|
|
;
|
|
; Absent any interrupts, execution gravitates here:
|
|
;
|
|
; 0FAA:
|
|
; ...
|
|
; call 1488
|
|
; call 1493 ; read port 0x42 (check flags buffer)
|
|
; call 06aa ; check byte at [2068]
|
|
; cli
|
|
; call 0e3e ; fetch byte at [21A5], OR byte at [207B]
|
|
; sti
|
|
; ; return byte at [2172] in A
|
|
; jmp 0FAE
|
|
;
|
|
X0faa: lxi h,X207f
|
|
add m
|
|
X0fae: cmp m
|
|
rz
|
|
push h
|
|
push psw
|
|
lda X207b
|
|
ora a
|
|
cz X1488
|
|
pop psw
|
|
pop h
|
|
jmp X0fae
|
|
;
|
|
; End of main loop?
|
|
;
|
|
|
|
X0fbe: lhld scratch_start ; HL = [0x204e]
|
|
mov a,h
|
|
ori 0f0h
|
|
mov h,a
|
|
shld scratch_start ; update [0x204e]
|
|
X0fc8: lda X2050
|
|
X0fcb: mov b,a
|
|
mov a,h
|
|
ani 0fh
|
|
ori 20h
|
|
mov h,a
|
|
adi 10h
|
|
mov d,a
|
|
mov e,l
|
|
mvi a,0ffh
|
|
X0fd8: mvi m,0
|
|
stax d
|
|
inx d
|
|
inx h
|
|
dcr b
|
|
jnz X0fd8
|
|
inr a
|
|
sta X21c3
|
|
ret
|
|
|
|
X0fe6: mvi b,0ffh
|
|
jmp X0fed
|
|
|
|
X0feb: mvi b,1
|
|
X0fed: lxi h,X2155
|
|
mov d,m
|
|
inx h
|
|
mov e,m
|
|
mov a,b
|
|
ora a
|
|
mov a,d
|
|
jp X0ffa
|
|
mov a,e
|
|
X0ffa: call X13e6
|
|
mov a,e
|
|
sub d
|
|
X0fff: mov c,a
|
|
lda X212b
|
|
X1003: mov d,m
|
|
mov m,a
|
|
mov a,b
|
|
add l
|
|
mov l,a
|
|
dcr c
|
|
mov a,d
|
|
jp X1003
|
|
ani 7fh
|
|
sta X212b
|
|
X1012: mvi a,0ffh
|
|
sta X210e
|
|
jmp X1636
|
|
|
|
X101a: call X1191
|
|
lda X2156
|
|
call X122f
|
|
call X0fe6
|
|
lda X2155
|
|
dcr a
|
|
jmp X103e
|
|
|
|
X102d: call X1191
|
|
lda X2155
|
|
dcr a
|
|
call X122f
|
|
call X0feb
|
|
lda X2156
|
|
dcr a
|
|
X103e: call X11ce
|
|
ei
|
|
sta X207a
|
|
lxi h,X2156
|
|
mov a,m
|
|
dcx h
|
|
sub m
|
|
cpi 17h
|
|
rnz
|
|
X104e: lxi h,X207a
|
|
mov a,m
|
|
mvi m,0
|
|
ora a
|
|
rz
|
|
lhld X2056
|
|
xchg
|
|
lhld X2058
|
|
mov m,d
|
|
inx h
|
|
mov m,e
|
|
lhld X2179
|
|
xchg
|
|
lhld X2075
|
|
mov m,d
|
|
inx h
|
|
mov m,e
|
|
X106a: lxi h,X2056
|
|
shld X2058
|
|
shld X2075
|
|
ret
|
|
|
|
X1074: call X13e3
|
|
ani 80h
|
|
sta X2157
|
|
call X138d
|
|
shld X214e
|
|
ret
|
|
;;
|
|
;; memset(0x1083): Set DE bytes at address HL to B
|
|
;;
|
|
memset: mov m,b ;; M <- B
|
|
inx h ;; HL++
|
|
dcx d ;; DE--
|
|
mov a,d ;;
|
|
ora e ;; A = D | E
|
|
jnz memset ;; repeat if A != 0
|
|
ret
|
|
|
|
mvi c,0
|
|
X108e: lxi h,X2051
|
|
di
|
|
lda X2065
|
|
ora m
|
|
ei
|
|
jz X10a7
|
|
mov a,c
|
|
rar
|
|
push b
|
|
cc X1488
|
|
call X1493
|
|
pop b
|
|
jmp X108e
|
|
|
|
X10a7: mov a,c
|
|
ral
|
|
rnc
|
|
jmp X1191
|
|
|
|
X10ad: lxi h,X0670
|
|
shld X2004
|
|
xra a
|
|
sta X2051
|
|
sta X2065
|
|
sta X205a
|
|
out 0a2h
|
|
mvi a,4
|
|
out 0a2h
|
|
call X106a
|
|
ei
|
|
mvi a,1
|
|
call X0faa
|
|
lxi h,X22d0
|
|
mov a,h
|
|
adi 10h
|
|
mov d,a
|
|
mov e,l
|
|
lxi b,X0d2f
|
|
X10d7: lda X21c7
|
|
mov m,a
|
|
inx h
|
|
mvi a,0ffh
|
|
stax d
|
|
inx d
|
|
dcx b
|
|
mov a,b
|
|
ora c
|
|
jnz X10d7
|
|
lda X21c7
|
|
sta X20f4
|
|
xra a
|
|
sta X20f9
|
|
sta X20f8
|
|
mvi a,0ffh
|
|
sta X20f5
|
|
ret
|
|
|
|
X10f9: xra a
|
|
sta X2051
|
|
X10fd: lda X2065
|
|
ora a
|
|
jnz X10fd
|
|
lxi h,X22d0
|
|
mvi b,0
|
|
dad b
|
|
call X11bf
|
|
inr c
|
|
call X1136
|
|
push h
|
|
mvi b,1
|
|
call X1136
|
|
pop h
|
|
mvi m,7fh
|
|
inx h
|
|
shld X2054
|
|
mvi m,70h
|
|
inx h
|
|
mvi m,6
|
|
mov a,c
|
|
call X13de
|
|
mvi m,7fh
|
|
dcr c
|
|
mvi a,3
|
|
sta X2002
|
|
lxi h,Xd0f2
|
|
shld X2004
|
|
ret
|
|
|
|
X1136: mvi m,7fh
|
|
inx h
|
|
mov d,h
|
|
mov e,l
|
|
inx d
|
|
inx d
|
|
mov a,d
|
|
ori 0f0h
|
|
mov m,a
|
|
inx h
|
|
mov m,e
|
|
mov a,c
|
|
call X13de
|
|
dcr b
|
|
jnz X1136
|
|
ret
|
|
|
|
X114c: lxi h,X20c2
|
|
inr c
|
|
inr c
|
|
inr c
|
|
lxi d,X22d0
|
|
mvi b,0
|
|
mvi a,19h
|
|
X1159: mov m,e
|
|
inx h
|
|
mov m,d
|
|
inx h
|
|
xchg
|
|
dad b
|
|
xchg
|
|
dcr a
|
|
jnz X1159
|
|
sta X2155
|
|
call X11bf
|
|
mov a,b
|
|
sta X2156
|
|
inr a
|
|
sta X212b
|
|
lhld X20f2
|
|
mvi a,17h
|
|
cmp b
|
|
jz X117e
|
|
lhld X20de
|
|
X117e: mov a,h
|
|
ori 0f0h
|
|
mov h,a
|
|
shld scratch_start ; update [0x204e]
|
|
lxi h,X2113
|
|
xra a
|
|
X1189: mov m,a
|
|
inr l
|
|
inr a
|
|
dcr b
|
|
jp X1189
|
|
ret
|
|
|
|
X1191: di
|
|
lda X207a
|
|
ora a
|
|
jz X11a0
|
|
X1199: ei
|
|
call X1488
|
|
jmp X1191
|
|
|
|
X11a0: lda X2065
|
|
ora a
|
|
jnz X11b0
|
|
lda X2051
|
|
ora a
|
|
ei
|
|
rz
|
|
jmp X1199
|
|
|
|
X11b0: lda X205b
|
|
lxi h,X205a
|
|
add m
|
|
daa
|
|
ani 0fh
|
|
jz X1199
|
|
ei
|
|
ret
|
|
|
|
X11bf: push h
|
|
mvi b,17h
|
|
lda X21a2
|
|
lxi h,X21c8
|
|
ana m
|
|
pop h
|
|
rz
|
|
mvi b,0dh
|
|
ret
|
|
|
|
X11ce: ora a
|
|
jp X11e8
|
|
lxi h,X2004
|
|
push h
|
|
mov a,m
|
|
inx h
|
|
mov l,m
|
|
ori 0f0h
|
|
mov h,a
|
|
shld scratch_start ; update [0x204e]
|
|
call X1290
|
|
pop h
|
|
mov b,d
|
|
mov c,e
|
|
jmp X120a
|
|
|
|
X11e8: call X127f
|
|
call X1290
|
|
push h
|
|
push d
|
|
xchg
|
|
call X1290
|
|
mov b,d
|
|
mov c,e
|
|
pop d
|
|
mov a,d
|
|
ori 0f0h
|
|
mov h,a
|
|
mov l,e
|
|
shld scratch_start ; update [0x204e]
|
|
pop h
|
|
mov a,h
|
|
ori 9fh
|
|
inr a
|
|
jnz X1211
|
|
call X1299
|
|
X120a: di
|
|
shld X2075
|
|
jmp X1228
|
|
|
|
X1211: call X129d
|
|
lda X2050
|
|
rrc
|
|
mov d,a
|
|
call X13de
|
|
inx h
|
|
di
|
|
shld X2075
|
|
mov a,d
|
|
call X13de
|
|
mov m,b
|
|
inx h
|
|
mov m,c
|
|
X1228: mov h,b
|
|
mov l,c
|
|
shld X2179
|
|
ei
|
|
ret
|
|
|
|
X122f: push psw
|
|
call X0fbe
|
|
pop psw
|
|
ora a
|
|
lxi h,X2004
|
|
jm X1248
|
|
call X127f
|
|
mov a,h
|
|
ori 9fh
|
|
inr a
|
|
jnz X1252
|
|
call X1299
|
|
X1248: di
|
|
shld X2058
|
|
mov b,m
|
|
inx h
|
|
mov c,m
|
|
jmp X1271
|
|
|
|
X1252: call X129d
|
|
lda X2050
|
|
rrc
|
|
mov b,a
|
|
call X13de
|
|
inx h
|
|
di
|
|
shld X2058
|
|
mov a,b
|
|
mov b,m
|
|
inx h
|
|
mov c,m
|
|
call X13de
|
|
xchg
|
|
lhld scratch_start ; load [0x204e]
|
|
xchg
|
|
mov m,e
|
|
dcx h
|
|
mov m,d
|
|
X1271: lhld scratch_start ; load [0x204e]
|
|
shld X2056
|
|
call X1299
|
|
mov m,b
|
|
inx h
|
|
mov m,c
|
|
ei
|
|
ret
|
|
|
|
X127f: inr a
|
|
mov b,a
|
|
lxi h,X2004
|
|
X1284: mov a,m
|
|
inx h
|
|
mov l,m
|
|
mov h,a
|
|
dcr b
|
|
rz
|
|
call X1299
|
|
jmp X1284
|
|
|
|
X1290: push h
|
|
call X1299
|
|
mov d,m
|
|
inx h
|
|
mov e,m
|
|
pop h
|
|
ret
|
|
|
|
X1299: call X13db
|
|
inx h
|
|
X129d: mov a,h
|
|
ani 0fh
|
|
ori 20h
|
|
mov h,a
|
|
ret
|
|
|
|
call X12b0
|
|
mov d,b
|
|
call X12b0
|
|
db 30h
|
|
call X12b0
|
|
db 10h
|
|
X12b0: call X1191
|
|
lxi h,X2113
|
|
lda X20f9
|
|
add l
|
|
mov l,a
|
|
mov a,m
|
|
ori 80h
|
|
mov m,a
|
|
call X138d
|
|
call X13c3
|
|
pop h
|
|
mov a,m
|
|
call X1395
|
|
lda X2153
|
|
lxi h,X20f8
|
|
ora a
|
|
rar
|
|
cmp m
|
|
jnc X1012
|
|
lxi h,X20f4
|
|
shld cursor_address
|
|
jmp X1012
|
|
|
|
lda X2130
|
|
cpi 2
|
|
rnc
|
|
sta X2176
|
|
X12e8: lxi h,X2172
|
|
mov a,m
|
|
ori 2
|
|
mov m,a
|
|
ret
|
|
|
|
mvi a,0fdh
|
|
call X0dbf
|
|
lda X2176
|
|
ori 32h
|
|
call X0db9
|
|
lda X21a9
|
|
push psw
|
|
ani 0c0h
|
|
ori 18h
|
|
add a
|
|
inr a
|
|
jp X1310
|
|
rar
|
|
rlc
|
|
ori 4
|
|
ani 7fh
|
|
X1310: call X0db9
|
|
mvi b,31h
|
|
pop psw
|
|
ani 20h
|
|
jnz X131c
|
|
inr b
|
|
X131c: mov a,b
|
|
call X0db9
|
|
lda X21ab
|
|
rrc
|
|
call X0d7a
|
|
call X0dbb
|
|
lda X21ac
|
|
rrc
|
|
call X0d7a
|
|
call X0dbb
|
|
mvi a,31h
|
|
call X0db9
|
|
lda X21aa
|
|
ani 0f0h
|
|
rrc
|
|
rrc
|
|
rrc
|
|
rrc
|
|
call X0d7a
|
|
mvi m,0f8h
|
|
jmp X0ef3
|
|
|
|
X134a: lxi h,X2157
|
|
mov a,m
|
|
ora a
|
|
rz
|
|
call X1191
|
|
lxi h,X2113
|
|
lda X20f9
|
|
add l
|
|
mov l,a
|
|
mov a,m
|
|
ani 7fh
|
|
mov m,a
|
|
call X138d
|
|
lda X2050
|
|
rrc
|
|
mov b,a
|
|
call X13de
|
|
xra a
|
|
X136b: mov m,a
|
|
inx h
|
|
dcr b
|
|
jnz X136b
|
|
mvi a,0f0h
|
|
sta X210e
|
|
call X1395
|
|
xra a
|
|
sta X2157
|
|
jmp X1636
|
|
|
|
X1380: lda X20f9
|
|
call X13e6
|
|
X1386: lxi h,X20c2
|
|
add a
|
|
add l
|
|
mov l,a
|
|
ret
|
|
|
|
X138d: call X1380
|
|
X1390: mov a,m
|
|
inx h
|
|
mov h,m
|
|
mov l,a
|
|
ret
|
|
|
|
X1395: ani 70h
|
|
mov b,a
|
|
lda X20f9
|
|
dcr a
|
|
lxi h,X2004
|
|
jm X13bd
|
|
call X13e6
|
|
mov d,a
|
|
ani 7fh
|
|
call X1386
|
|
call X1390
|
|
lda X2050
|
|
rrc
|
|
mov e,a
|
|
inx h
|
|
inr d
|
|
dcr d
|
|
mvi d,0
|
|
dad d
|
|
cm X13bd
|
|
dad d
|
|
X13bd: mov a,m
|
|
ani 8fh
|
|
ora b
|
|
mov m,a
|
|
ret
|
|
|
|
X13c3: lda X2050
|
|
rrc
|
|
mov d,h
|
|
mov e,l
|
|
call X13de
|
|
xchg
|
|
call X13db
|
|
mvi b,3
|
|
X13d2: mov a,m
|
|
stax d
|
|
inx d
|
|
inx h
|
|
dcr b
|
|
jnz X13d2
|
|
ret
|
|
|
|
X13db: lda X2050
|
|
X13de: add l
|
|
mov l,a
|
|
rnc
|
|
inr h
|
|
ret
|
|
|
|
X13e3: lda X20f9
|
|
X13e6: lxi h,X2113
|
|
add l
|
|
mov l,a
|
|
mov a,m
|
|
ret
|
|
|
|
mvi c,0
|
|
jmp X13f4
|
|
|
|
mvi c,0ffh
|
|
X13f4: lda X21b8
|
|
ora a
|
|
lxi h,X1426
|
|
jz X1404
|
|
cpi 3fh
|
|
rnz
|
|
lxi h,X140a
|
|
X1404: mov a,b
|
|
mov b,c
|
|
call X09ff
|
|
ret
|
|
|
|
X140a: lxi b,X142a
|
|
stax b
|
|
cma
|
|
inr d
|
|
inx b
|
|
mov d,a
|
|
inr d
|
|
inr b
|
|
mov b,a
|
|
inr d
|
|
dcr b
|
|
mov c,m
|
|
inr d
|
|
mvi b,3fh
|
|
inr d
|
|
rlc
|
|
mov h,m
|
|
inr d
|
|
db 8
|
|
mov e,a
|
|
inr d
|
|
dad b
|
|
mov l,l
|
|
inr d
|
|
nop
|
|
X1426: inr d
|
|
db 38h
|
|
inr d
|
|
nop
|
|
X142a: lxi h,X21bc
|
|
mov m,b
|
|
ret
|
|
|
|
call X1476
|
|
ana a
|
|
lxi h,Xc320
|
|
jp Xcd0b
|
|
hlt
|
|
|
|
inr d
|
|
xra b
|
|
lxi h,Xc920
|
|
lxi h,X2101
|
|
mov m,b
|
|
call X1848
|
|
ret
|
|
|
|
call X1476
|
|
ana m
|
|
lxi h,Xc980
|
|
call X1476
|
|
ana m
|
|
lxi h,Xc320
|
|
mov l,e
|
|
inx b
|
|
lxi h,X21a2
|
|
mov m,b
|
|
call X0381
|
|
ret
|
|
|
|
call X1476
|
|
ana m
|
|
lxi h,Xc940
|
|
call X1476
|
|
xra b
|
|
lxi h,Xc940
|
|
call X1476
|
|
xra b
|
|
lxi h,Xc310
|
|
mov b,d
|
|
inx b
|
|
X1476: pop h
|
|
mov e,m
|
|
inx h
|
|
mov d,m
|
|
inx h
|
|
mov a,m
|
|
inx h
|
|
xchg
|
|
mov c,a
|
|
cma
|
|
ana m
|
|
mov m,a
|
|
mov a,b
|
|
ana c
|
|
ora m
|
|
mov m,a
|
|
xchg
|
|
pchl
|
|
|
|
X1488: call X1493
|
|
ani 10h
|
|
cz X06aa
|
|
jmp X0e59
|
|
;;
|
|
;; SUBROUTINE A
|
|
;;
|
|
X1493: in 42h ;; Read flags buffer
|
|
ani 80h ;; check if transmit buffer is empty
|
|
rz ;; if zero, return
|
|
lxi h,X2144 ;; HL = 0x2144
|
|
mov a,m ;; Load from 2144
|
|
ora a ;; Check if zero
|
|
jz X14a2 ;;
|
|
mvi a,10h ;; If not, A = 10 (else A is zero)
|
|
X14a2: lxi h,X21a5 ;;
|
|
ora m ;; or bits from 0x21a5
|
|
lxi h,X2145 ;;
|
|
ora m ;; or bits from 0x2145
|
|
inx h ;;
|
|
ora m ;; ... and 0x2146
|
|
inx h ;;
|
|
ora m ;; ... and 0x2147
|
|
mvi m,0 ;; zero 0x2147
|
|
inx h ;;
|
|
ora m ;; ... and 0x2148
|
|
mvi m,0 ;; zero 0x2148
|
|
out 82h ;; Write to keyboard buffer
|
|
lxi h,X2074 ;;
|
|
inr m ;; Increment what's at 0x2074
|
|
lda X2077 ;; load what's at 0x2077
|
|
ora a ;; return if it's not zero
|
|
rnz ;;
|
|
lda X2065 ;; A = [0x2065]
|
|
lxi h,X2051 ;;
|
|
ora m ;; return if [0x2065] | [0x2051] != 0
|
|
rnz
|
|
|
|
lhld cursor_countdn ; HL = cursor countdown from [0x212d]
|
|
dcx h
|
|
mov a,h
|
|
ora l
|
|
jz X14d4
|
|
shld cursor_countdn ; update cursor countdown with decremented value
|
|
ret
|
|
;
|
|
; Cursor countdown reached zero, time to invert the cursor;
|
|
; note that the cursor is on (visible) twice as long as it's off
|
|
;
|
|
X14d4: lda cursor_visible ; A = 0xff (visible) or 0x00 (invisible)
|
|
xri 0ffh ; invert
|
|
sta cursor_visible ;
|
|
lxi h,212h ; new initial count; start with 0x0212
|
|
jnz X14e5 ; and stick with that if cursor still visible
|
|
lxi h,109h ; otherwise, use half that value (0x0109) if invisible
|
|
X14e5: shld cursor_countdn ; store new cursor countdown
|
|
lhld cursor_address
|
|
mov b,m ; B = current cursor
|
|
lda X2159 ; A = cursor inversion mask (typically 0x80)
|
|
xra b ; B = new (inverted) cursor
|
|
mov m,a ; store new cursor
|
|
;
|
|
; Guessing this is AVO-only code, because it's monkeying with cursor_address + 0x1000, which doesn't exist without AVO
|
|
;
|
|
lxi d,1000h
|
|
dad d
|
|
lda X215a
|
|
xra m
|
|
mov m,a
|
|
ret
|
|
|
|
mov m,h
|
|
mov a,b
|
|
ora a
|
|
jz X1515
|
|
dcr a
|
|
jz X150a
|
|
dcr a
|
|
rnz
|
|
call X1515
|
|
X150a: lda X20f8
|
|
mov b,a
|
|
inr b
|
|
lhld X214e
|
|
jmp X1529
|
|
|
|
X1515: lda X20f8
|
|
mov b,a
|
|
lda X2157
|
|
ora a
|
|
lda X2050
|
|
jz X1524
|
|
rrc
|
|
X1524: sub b
|
|
mov b,a
|
|
lhld cursor_address
|
|
X1529: mov a,h
|
|
adi 10h
|
|
mov d,a
|
|
mov e,l
|
|
mvi a,0ffh
|
|
X1530: stax d
|
|
mvi m,0
|
|
inx h
|
|
inx d
|
|
dcr b
|
|
jnz X1530
|
|
sta X20f5
|
|
xra a
|
|
sta X20f4
|
|
ret
|
|
|
|
mov a,b
|
|
ora a
|
|
jz X156a
|
|
dcr a
|
|
jz X1555
|
|
dcr a
|
|
rnz
|
|
call X1555
|
|
call X156a
|
|
jmp X134a
|
|
|
|
X1555: lxi h,X20f9
|
|
mov a,m
|
|
push psw
|
|
mov b,a
|
|
xra a
|
|
mov m,a
|
|
mvi c,0ffh
|
|
call X1586
|
|
pop psw
|
|
mov m,a
|
|
call X1074
|
|
jmp X150a
|
|
|
|
X156a: lda X20f8
|
|
ora a
|
|
cz X134a
|
|
call X1515
|
|
lxi h,X20f9
|
|
mov a,m
|
|
push psw
|
|
mov c,a
|
|
mvi a,17h
|
|
sub c
|
|
mov b,a
|
|
call X1586
|
|
pop psw
|
|
mov m,a
|
|
jmp X1074
|
|
|
|
X1586: dcr b
|
|
rm
|
|
inr c
|
|
mov m,c
|
|
push b
|
|
push h
|
|
call X13e3
|
|
ani 7fh
|
|
mov m,a
|
|
mvi a,70h
|
|
call X1395
|
|
call X1074
|
|
lda X2050
|
|
mov b,a
|
|
call X1529
|
|
pop h
|
|
pop b
|
|
jmp X1586
|
|
|
|
mvi c,81h
|
|
call X108e
|
|
call X11bf
|
|
lda X2130
|
|
ora a
|
|
jz X15b6
|
|
dcr a
|
|
X15b6: mov d,a
|
|
lda X2131
|
|
ora a
|
|
jnz X15c0
|
|
mov a,b
|
|
inr a
|
|
X15c0: dcr a
|
|
mov e,a
|
|
mov a,b
|
|
cmp e
|
|
rc
|
|
mov a,d
|
|
cmp e
|
|
rnc
|
|
lxi h,X2155
|
|
mov m,d
|
|
inx h
|
|
mov m,e
|
|
mov c,e
|
|
mov b,d
|
|
mov a,c
|
|
sub b
|
|
inr a
|
|
mov e,a
|
|
lxi h,X2004
|
|
mov a,b
|
|
ora a
|
|
jz X15e8
|
|
mov d,b
|
|
X15dd: mov a,m
|
|
ani 7fh
|
|
mov m,a
|
|
call X162b
|
|
dcr d
|
|
jnz X15dd
|
|
X15e8: mov a,m
|
|
ori 80h
|
|
mov m,a
|
|
call X162b
|
|
dcr e
|
|
jnz X15e8
|
|
mvi a,17h
|
|
sub c
|
|
jz X1605
|
|
mov d,a
|
|
X15fa: mov a,m
|
|
ani 7fh
|
|
mov m,a
|
|
call X162b
|
|
dcr d
|
|
jnz X15fa
|
|
X1605: mov a,b
|
|
sta X2155
|
|
mov a,c
|
|
sta X2156
|
|
lxi h,X2113
|
|
mvi c,18h
|
|
X1612: mov a,m
|
|
ora a
|
|
jp X1623
|
|
push h
|
|
call X1386
|
|
mov a,m
|
|
inx h
|
|
mov h,m
|
|
mov l,a
|
|
call X13c3
|
|
pop h
|
|
X1623: inx h
|
|
dcr c
|
|
jnz X1612
|
|
jmp X1848
|
|
|
|
X162b: inx h
|
|
mov l,m
|
|
ani 0fh
|
|
ori 20h
|
|
mov h,a
|
|
inx h
|
|
jmp X13db
|
|
|
|
X1636: lxi h,13
|
|
shld cursor_countdn ; reset cursor countdown to 13 (0x000d)
|
|
xra a
|
|
sta cursor_visible ; reset cursor visibility
|
|
lhld cursor_address
|
|
lda X20f4
|
|
mov b,a
|
|
mov m,a
|
|
mov a,h
|
|
adi 10h
|
|
mov h,a
|
|
lda X20f5
|
|
mov m,a
|
|
lda X2050
|
|
dcr a
|
|
mov e,a
|
|
lda X207b
|
|
ora a
|
|
jnz X167b
|
|
lda X20f9
|
|
lxi h,X210e
|
|
cmp m
|
|
jz X167f
|
|
mov m,a
|
|
call X1074
|
|
xra a
|
|
sta X2154
|
|
lxi h,X2157
|
|
mov a,m
|
|
ora a
|
|
jz X167b
|
|
mov a,e
|
|
dcr a
|
|
ora a
|
|
rar
|
|
mov e,a
|
|
X167b: mov a,e
|
|
sta X2153
|
|
X167f: lxi h,X2153
|
|
lxi d,X20f8
|
|
ldax d
|
|
cmp m
|
|
jc X168c
|
|
mov a,m
|
|
stax d
|
|
X168c: lda X21bb
|
|
adi 8
|
|
sub m
|
|
jnz X16a1
|
|
inx h
|
|
ora m
|
|
jz X16a1
|
|
call X0938
|
|
xra a
|
|
sta X2154
|
|
X16a1: lda X20f8
|
|
sta X21bb
|
|
lhld X214e
|
|
call X13de
|
|
shld cursor_address
|
|
mov a,m
|
|
sta X20f4
|
|
mov b,a
|
|
mov a,h
|
|
adi 10h
|
|
mov h,a
|
|
mov a,m
|
|
sta X20f5
|
|
lhld cursor_address
|
|
mov m,b
|
|
ret
|
|
|
|
X16c2: mov b,a
|
|
lxi h,X16f1
|
|
shld X2140
|
|
xra a
|
|
sta X212f
|
|
sta X214b
|
|
sta X207d
|
|
lxi h,X2130
|
|
mvi c,0fh
|
|
xra a
|
|
X16d9: mov m,a
|
|
inx h
|
|
dcr c
|
|
jnz X16d9
|
|
lxi h,X21b8
|
|
mvi m,0
|
|
mov a,b
|
|
cpi 40h
|
|
jnc X16f2
|
|
cpi 3ch
|
|
jc X16f2
|
|
mov m,a
|
|
ret
|
|
|
|
X16f1: mov b,a
|
|
X16f2: mov a,b
|
|
cpi 3ah
|
|
jnc X1717
|
|
sui 30h
|
|
jm X1717
|
|
mov c,a
|
|
lxi h,X212f
|
|
mov a,m
|
|
cpi 1ah
|
|
jnc X1713
|
|
rlc
|
|
mov b,a
|
|
rlc
|
|
rlc
|
|
add b
|
|
jc X1713
|
|
add c
|
|
jnc X1715
|
|
X1713: mvi a,0ffh
|
|
X1715: mov m,a
|
|
ret
|
|
|
|
X1717: lxi d,X2130
|
|
push psw
|
|
lxi h,X214b
|
|
mov c,m
|
|
mvi b,0
|
|
xchg
|
|
dad b
|
|
lxi b,X212f
|
|
ldax b
|
|
mov m,a
|
|
xra a
|
|
stax b
|
|
ldax d
|
|
cpi 0fh
|
|
jz X1732
|
|
inr a
|
|
stax d
|
|
X1732: pop psw
|
|
X1733: mov b,a
|
|
cpi 3bh
|
|
rz
|
|
ani 0c0h
|
|
mov a,b
|
|
jz X1743
|
|
sta X207e
|
|
jmp X0aa2
|
|
|
|
X1743: lxi h,X207d
|
|
add m
|
|
jnc X174c
|
|
mvi a,0ffh
|
|
X174c: mov m,a
|
|
lxi h,X1733
|
|
shld X2140
|
|
ret
|
|
|
|
X1754: mvi d,0
|
|
mvi b,1
|
|
jmp X1762
|
|
;;
|
|
;; Third initialization call?
|
|
;;
|
|
X175b: call X02c0 ;; Initialize start of screen RAM and wipe attribute RAM to 0xff
|
|
mvi b,0ah ;; B = 0x0a
|
|
mvi d,1 ;; D = 1
|
|
X1762: push b ;; push B, D
|
|
push d ;;
|
|
call X17be ;; Display wait message
|
|
pop d ;; pop D
|
|
di ;; disable interrupts(???)
|
|
lxi h,X217b ;; HL = 0x217b
|
|
mvi e,33h ;; E = 0x33
|
|
mvi c,1 ;; C = 1
|
|
xra a ;; A = 0
|
|
X1771: sta X21ae ;; 0x21ae = A
|
|
mov a,c ;; A = C
|
|
sta X21ad ;; 0x21ad = A
|
|
push d ;; push D,H
|
|
push h ;;
|
|
mov a,d ;; A=D
|
|
ora a ;; or A
|
|
mov a,m ;; load A from HL
|
|
sta X21af ;; store it in 0x21af
|
|
cz X18ae ;; if A is 0 call X18ae
|
|
call X18a3 ;; call X18a3
|
|
pop h ;; pop H,D
|
|
pop d
|
|
lda X21af
|
|
dcr e
|
|
jz X179e
|
|
mov m,a
|
|
lda X21ad
|
|
rlc
|
|
xra m
|
|
mov c,a
|
|
inx h
|
|
lda X21ae
|
|
inr a
|
|
jmp X1771
|
|
|
|
X179e: cmp m
|
|
pop b
|
|
mvi c,0
|
|
jz X17ac
|
|
dcr b
|
|
jnz X1762
|
|
call X17d0
|
|
X17ac: mov a,c
|
|
ora a
|
|
push psw
|
|
mvi c,40h
|
|
mvi a,63h
|
|
call X192b
|
|
lxi h,Xd0f2
|
|
shld X2004
|
|
pop psw
|
|
ret
|
|
;;
|
|
;; Show wait message
|
|
;;
|
|
X17be: lxi d,X17ec ;; DE = 0x17ec
|
|
mvi b,7 ;; B = 7
|
|
lxi h,X21cc ;; HL = 0x21cc
|
|
call memmove ;; Initialize 0x21cc to Wait message
|
|
lxi h,Xcc71 ;; HL = 0xcc71
|
|
shld X2004 ;; retarget screen ram to display wait message
|
|
ret
|
|
|
|
X17d0: lxi h,X217b
|
|
mvi b,27h
|
|
X17d5: mvi m,80h
|
|
inx h
|
|
dcr b
|
|
jnz X17d5
|
|
lxi d,X17f3 ;; DE = 0x17f3
|
|
mvi b,0bh ;; B = 11
|
|
call memmove ;; store
|
|
mvi c,1
|
|
mvi a,30h
|
|
sta X2078
|
|
ret
|
|
X17ec:
|
|
db 'Wait'
|
|
db 07fh,070h,06h
|
|
X17f3:
|
|
db 0,8,06eh,020h
|
|
db 0d0h,050h,0,020h
|
|
db 0,0e0h,0e0h
|
|
X17fe:
|
|
lda X2155
|
|
lxi b,X00ff
|
|
jmp X180f
|
|
|
|
call X11bf
|
|
lda X2156
|
|
mvi c,1
|
|
X180f: lxi h,X20f9
|
|
jmp X1825
|
|
|
|
X1815: lda X2153
|
|
lxi b,Xff01
|
|
jmp X1822
|
|
|
|
X181e: xra a
|
|
lxi b,X00ff
|
|
X1822: lxi h,X20f8
|
|
X1825: mov d,a
|
|
lda X21b8
|
|
ora a
|
|
jnz X0a15
|
|
lda X2130
|
|
ora a
|
|
jnz X1835
|
|
inr a
|
|
X1835: mov e,a
|
|
mov a,m
|
|
X1837: cmp d
|
|
jz X1844
|
|
cmp b
|
|
jz X1844
|
|
add c
|
|
dcr e
|
|
jnz X1837
|
|
X1844: mov m,a
|
|
jmp X1636
|
|
|
|
X1848: lxi h,0
|
|
shld X2130
|
|
mvi a,0ffh
|
|
sta X210e
|
|
lda X2101
|
|
mov c,a
|
|
lxi h,X2130
|
|
mov a,m
|
|
ora a
|
|
jz X1860
|
|
dcr a
|
|
X1860: mov b,a
|
|
mov a,c
|
|
ora a
|
|
jz X1869
|
|
lda X2155
|
|
X1869: add b
|
|
mov b,a
|
|
mov a,c
|
|
ora a
|
|
lda X2156
|
|
jnz X1879
|
|
mov c,b
|
|
call X11bf
|
|
mov a,b
|
|
mov b,c
|
|
X1879: cmp b
|
|
jc X187e
|
|
mov a,b
|
|
X187e: sta X20f9
|
|
inx h
|
|
mov a,m
|
|
ora a
|
|
jz X1888
|
|
dcr a
|
|
X1888: mov b,a
|
|
mov a,c
|
|
ora a
|
|
jnz X1895
|
|
lda X2050
|
|
dcr a
|
|
jmp X1898
|
|
|
|
X1895: lda X2153
|
|
X1898: cmp b
|
|
jc X189d
|
|
mov a,b
|
|
X189d: sta X20f8
|
|
jmp X1636
|
|
|
|
X18a3: mvi c,40h
|
|
call X1928
|
|
call X18c1
|
|
jmp X18bc
|
|
|
|
X18ae: mvi c,40h
|
|
call X1928
|
|
call X19a8
|
|
call X1977
|
|
call X19d6
|
|
X18bc: mvi a,30h
|
|
out 62h
|
|
ret
|
|
;;
|
|
;; On h pulse, write 0x2d to NVR... this looks like it's doing a read
|
|
;;
|
|
X18c1: in 42h
|
|
ana c
|
|
jz X18c1
|
|
X18c7: in 42h
|
|
ana c
|
|
jnz X18c7
|
|
mvi a,2dh ;; Write READ command to NVR latch
|
|
out 62h
|
|
X18d1: in 42h
|
|
ana c
|
|
jz X18d1
|
|
X18d7: in 42h
|
|
ana c
|
|
jnz X18d7
|
|
mvi a,2fh ;; Write 0x2fh (standby) to nvr latch
|
|
out 62h
|
|
lxi h,X21d3 ;; HL = X21d3
|
|
mvi b,0eh ;; B = 14 -- we're reading 14 bits
|
|
X18e6: in 42h
|
|
ana c
|
|
jz X18e6
|
|
X18ec: in 42h
|
|
ana c
|
|
jnz X18ec ;; wait for NVR clock L
|
|
mvi a,25h ;; shft bit out of nvr
|
|
out 62h
|
|
X18f6: in 42h
|
|
ana c
|
|
jz X18f6 ;; wait for NVR clock H
|
|
in 42h ;; read bit and store it in memory
|
|
mov m,a
|
|
inx h
|
|
X1900: in 42h
|
|
ana c
|
|
jnz X1900 ;; wait for NVR clock L
|
|
dcr b
|
|
jnz X18f6 ;; read next bit
|
|
mvi a,2fh ;; send standby
|
|
out 62h
|
|
lxi d,X21d3 ;; DE = 0x21d3
|
|
mvi b,0eh ;; B = 14
|
|
lxi h,0 ;; HL = 0
|
|
X1916: dad h ;;
|
|
ldax d ;; load next char
|
|
ani 20h ;; and with NVR data bit
|
|
rlc ;; rotate NVR bit to high bit
|
|
rlc
|
|
rlc
|
|
ora l
|
|
mov l,a
|
|
inx d
|
|
dcr b
|
|
jnz X1916
|
|
shld X21af ;; Store the finished data in 21af and 21ae
|
|
ret
|
|
;;
|
|
;; Loads address A into NVR address register
|
|
;;
|
|
X1928: lda X21ae ;; Load accumulator from 0x21ae -- (0x42)
|
|
X192b: mvi b,0ffh ;; B = 0xff
|
|
X192d: inr b ;; increment B
|
|
sui 0ah ;; subtract 0x0a from accumulator
|
|
jp X192d ;; repeat while accumulator is positive
|
|
adi 0ah ;; add 0x0a to accumulator
|
|
|
|
;; B = A/10, A = A%10 -- this is almost certainly related to NVR!
|
|
;; First, fill the buffer at 21d3 with 20 bytes of 0x23 (accept address 1)
|
|
|
|
lxi h,X21d3 ;; HL = 0x21d3
|
|
mvi e,23h ;; E = 0x23
|
|
mvi d,14h ;; D = 0x14
|
|
X193c: mov m,e ;;
|
|
inx h ;; HL++
|
|
dcr d ;; D--
|
|
jnz X193c ;; repeat until D is zero
|
|
|
|
;; End buffer with 0x2f -- put in standby
|
|
|
|
mvi m,2fh ;; Store 0x2f in 21e7
|
|
|
|
;; Set 21d3 + a to 0x22 (accept address 0)
|
|
|
|
lxi h,X21d3 ;; HL = 0x21d3
|
|
mov e,a ;; copy A to E
|
|
mvi d,0 ;; clear D
|
|
dad d ;; add DE to HL -- calculate address of bit A
|
|
mvi m,22h ;; Store 0x22 in M
|
|
|
|
;; Set 21d3 + 10 + b to 0x22 (accept address 0)
|
|
|
|
lxi h,X21d3 ;; HL = 0x21d3
|
|
mvi a,0ah ;; A = 0x0a
|
|
add b ;; A = 0x0a + B
|
|
mov e,a
|
|
dad d
|
|
mvi m,22h
|
|
|
|
;; Wait for horiz latch
|
|
|
|
X1957: in 42h
|
|
ana c
|
|
jnz X1957
|
|
|
|
;; Now copy from 21d3 to nvr latch, one per edge, 21 bytes
|
|
|
|
lxi h,X21d3
|
|
mvi b,15h ;;
|
|
X1962: in 42h
|
|
ana c ;; Flags Buffer & C
|
|
jz X1962
|
|
dcr b
|
|
rm ;; Return if B is negative
|
|
X196a: in 42h
|
|
ana c
|
|
jnz X196a
|
|
mov a,m
|
|
out 62h
|
|
inx h
|
|
jmp X1962
|
|
|
|
X1977: lhld X21af
|
|
dad h
|
|
dad h
|
|
lxi d,X21d3
|
|
mvi b,0eh
|
|
X1981: mvi a,20h
|
|
dad h
|
|
ral
|
|
stax d
|
|
inx d
|
|
dcr b
|
|
jnz X1981
|
|
mvi a,2fh
|
|
stax d
|
|
lxi h,X21d3
|
|
mvi b,0fh
|
|
X1993: in 42h
|
|
ana c
|
|
jz X1993
|
|
X1999: in 42h
|
|
ana c
|
|
jnz X1999
|
|
mov a,m
|
|
out 62h
|
|
inx h
|
|
dcr b
|
|
jnz X1993
|
|
ret
|
|
|
|
X19a8: in 42h
|
|
ana c
|
|
jz X19a8
|
|
X19ae: in 42h
|
|
ana c
|
|
jnz X19ae
|
|
mvi a,2bh
|
|
out 62h
|
|
call X19c0
|
|
mvi a,2fh
|
|
out 62h
|
|
ret
|
|
|
|
X19c0: lxi h,X013b
|
|
X19c3: in 42h
|
|
ana c
|
|
jz X19c3
|
|
X19c9: in 42h
|
|
ana c
|
|
jnz X19c9
|
|
dcx h
|
|
mov a,h
|
|
ora l
|
|
jnz X19c3
|
|
ret
|
|
|
|
X19d6: in 42h
|
|
ana c
|
|
jz X19d6
|
|
X19dc: in 42h
|
|
ana c
|
|
jnz X19dc
|
|
mvi a,29h
|
|
out 62h
|
|
call X19c0
|
|
mvi a,2fh
|
|
out 62h
|
|
ret
|
|
|
|
X19ee: cpi 20h
|
|
mvi c,43h
|
|
jz X01ff
|
|
lxi h,X1bb0
|
|
push h
|
|
cpi 0dh
|
|
jz X094b
|
|
cpi 9
|
|
jz X0df9
|
|
cpi 3ah
|
|
jnc X1b60
|
|
sui 30h
|
|
rm
|
|
add a
|
|
lxi h,X1aa2
|
|
call X13de
|
|
call X1390
|
|
mov a,b
|
|
lxi d,X21ac
|
|
pchl
|
|
|
|
X1a1a: sta X2177
|
|
jmp X0812
|
|
|
|
X1a20: lda X207b
|
|
xri 0ffh
|
|
sta X207b
|
|
jz X1a61
|
|
X1a2b: mvi c,80h
|
|
call X108e
|
|
lhld X2140
|
|
shld X2111
|
|
lxi h,X19ee
|
|
shld X2140
|
|
lxi h,0
|
|
shld X2143
|
|
shld X2172
|
|
X1a45: lhld X2004
|
|
shld X21c5
|
|
lhld X20f8
|
|
shld X210d
|
|
call X1bba
|
|
shld X214e
|
|
xra a
|
|
sta X20f8
|
|
call X1bf9
|
|
jmp X1636
|
|
|
|
X1a61: lhld X2111
|
|
shld X2140
|
|
call X1bba
|
|
lxi d,1000h
|
|
dad d
|
|
lda X2050
|
|
X1a71: mvi m,0ffh
|
|
inx h
|
|
dcr a
|
|
jnz X1a71
|
|
lxi h,X210d
|
|
mov a,m
|
|
sta X20f8
|
|
mvi a,0ffh
|
|
inx h
|
|
mov m,a
|
|
call X1636
|
|
lhld X21c5
|
|
shld X2004
|
|
xra a
|
|
sta X21c4
|
|
sta X21c2
|
|
in 42h
|
|
ani 8
|
|
jz X1aa1
|
|
lda X2176
|
|
ora a
|
|
cz X12e8
|
|
X1aa1: ret
|
|
|
|
X1aa2: rst 1
|
|
ldax d
|
|
dad b
|
|
dcx d
|
|
rnc
|
|
ldax d
|
|
jp Xfe1a
|
|
ldax d
|
|
ldax b
|
|
dcx d
|
|
shld X401b
|
|
dcx d
|
|
mov b,c
|
|
dcx d
|
|
ora m
|
|
ldax d
|
|
call X1b52
|
|
xra a
|
|
sta X210e
|
|
sta X210d
|
|
lda X21a2
|
|
ora a
|
|
push psw
|
|
cz X0b77
|
|
pop psw
|
|
cnz X0b63
|
|
jmp X1a45
|
|
|
|
rst 0
|
|
call X1b52
|
|
lda X20f8
|
|
ora a
|
|
rz
|
|
call X0e23
|
|
xra m
|
|
mov m,a
|
|
call X0e23
|
|
ana m
|
|
mvi b,54h
|
|
jnz X1ae8
|
|
X1ae6: mvi b,0
|
|
X1ae8: mov a,b
|
|
sta X20f4
|
|
lda X20f8
|
|
jmp X1eea
|
|
;;
|
|
;; Below is what appears to be a bunch of dead code-- unreferenced functions (meant for use
|
|
;; by an expansion rom or patch, perhaps?).
|
|
;;
|
|
call X1b52
|
|
call X0dec
|
|
call X1ccd
|
|
jmp X1ae6
|
|
|
|
lxi h,X21a5
|
|
mov a,m
|
|
xri 20h
|
|
mov m,a
|
|
xra a
|
|
sta X2144
|
|
ret
|
|
|
|
call X094b
|
|
lxi h,X225a
|
|
mov a,m
|
|
xri 3
|
|
mov m,a
|
|
sta X2265
|
|
ani 1
|
|
sta X21be
|
|
jz X1cd3
|
|
jmp X1c35
|
|
|
|
call X1b59
|
|
lxi h,X21a6
|
|
lda X20f8
|
|
sui 2
|
|
cpi 28h
|
|
rnc
|
|
nop
|
|
|
|
org 1b34h
|
|
|
|
mov d,a
|
|
call X0e2b
|
|
xra m
|
|
mov m,a
|
|
call X1ddb
|
|
jmp X1cd3
|
|
|
|
dcx d
|
|
xchg
|
|
call X1b59
|
|
sta X20f8
|
|
mov a,m
|
|
adi 10h
|
|
mov m,a
|
|
call X1ddb
|
|
jmp X1cd3
|
|
|
|
X1b52: lda X21be
|
|
ora a
|
|
rnz
|
|
pop h
|
|
ret
|
|
|
|
X1b59: lda X21be
|
|
ora a
|
|
rz
|
|
pop h
|
|
ret
|
|
|
|
X1b60: lda X2069
|
|
ani 20h
|
|
rz
|
|
mov a,b
|
|
cpi 53h
|
|
jnz X1b72
|
|
call X1754
|
|
jmp X1b81
|
|
|
|
X1b72: cpi 52h
|
|
jnz X1b86
|
|
call X175b
|
|
ei
|
|
call X03a2
|
|
call X1a2b
|
|
X1b81: ei
|
|
call X1bf9
|
|
ret
|
|
|
|
X1b86: cpi 41h
|
|
rnz
|
|
call X1b59
|
|
call X094b
|
|
mvi a,41h
|
|
call X05e6
|
|
mvi a,3dh
|
|
call X05e6
|
|
mvi a,20h
|
|
call X05e6
|
|
lxi h,X1e9f
|
|
shld X2140
|
|
pop h
|
|
ret
|
|
|
|
sbb b
|
|
cpi 61h
|
|
rm
|
|
cpi 7bh
|
|
rp
|
|
ani 0dfh
|
|
ret
|
|
|
|
X1bb0: call X0394
|
|
lxi h,X19ee
|
|
shld X2140
|
|
ret
|
|
|
|
X1bba: lhld scratch_start ; load [0x204e]
|
|
jmp X1bc3
|
|
|
|
X1bc0: lxi h,X21cc
|
|
X1bc3: mov a,h
|
|
ani 0fh
|
|
ori 20h
|
|
mov h,a
|
|
ret
|
|
|
|
X1bca: call X1bba
|
|
call X0fc8
|
|
push h
|
|
mvi m,7fh
|
|
inx h
|
|
xchg
|
|
call X1bc0
|
|
mov a,h
|
|
ani 0fh
|
|
ori 70h
|
|
stax d
|
|
inx d
|
|
mov a,l
|
|
stax d
|
|
pop h
|
|
lda X2050
|
|
mov e,a
|
|
mvi b,54h
|
|
X1be8: mov a,e
|
|
call X0e27
|
|
ana m
|
|
jz X1bf4
|
|
mov a,e
|
|
call X1eea
|
|
X1bf4: dcr e
|
|
jnz X1be8
|
|
ret
|
|
|
|
X1bf9: lxi b,X1cad
|
|
lxi h,X2253
|
|
mvi a,0fah
|
|
call X1c71
|
|
mvi c,1
|
|
mvi b,10h
|
|
call X1c8a
|
|
lxi b,X1cad
|
|
mvi a,0fah
|
|
call X1c71
|
|
mvi c,1
|
|
mvi b,50h
|
|
call X1c8a
|
|
lxi b,X1cb6
|
|
mvi a,0fdh
|
|
call X1c71
|
|
mvi c,13h
|
|
call X1c88
|
|
mvi m,7fh
|
|
inx h
|
|
xchg
|
|
call X1bba
|
|
mov a,h
|
|
ori 70h
|
|
stax d
|
|
inx d
|
|
mov a,l
|
|
stax d
|
|
X1c35: call X1bc0
|
|
lda X2050
|
|
mov b,a
|
|
mvi a,31h
|
|
X1c3e: mov m,a
|
|
inx h
|
|
mov c,a
|
|
ani 0fh
|
|
mov a,c
|
|
jnz X1c49
|
|
xri 80h
|
|
X1c49: inr a
|
|
daa
|
|
jnc X1c50
|
|
ori 80h
|
|
X1c50: ani 8fh
|
|
ori 30h
|
|
dcr b
|
|
jnz X1c3e
|
|
call X1c9f
|
|
call X1bca
|
|
mvi a,1
|
|
X1c60: sta X21be
|
|
lxi h,X2253
|
|
mov a,h
|
|
mov h,l
|
|
ani 0fh
|
|
ori 30h
|
|
mov l,a
|
|
shld X2004
|
|
ret
|
|
|
|
X1c71: push h
|
|
lxi d,1000h
|
|
dad d
|
|
pop d
|
|
X1c77: push psw
|
|
ldax b
|
|
ora a
|
|
jz X1c86
|
|
stax d
|
|
pop psw
|
|
mov m,a
|
|
inx h
|
|
inx d
|
|
inx b
|
|
jmp X1c77
|
|
|
|
X1c86: pop psw
|
|
ret
|
|
|
|
X1c88: mvi b,70h
|
|
X1c8a: xchg
|
|
X1c8b: mvi m,7fh
|
|
inx h
|
|
mov d,h
|
|
mov e,l
|
|
inx d
|
|
inx d
|
|
mov a,d
|
|
ani 0fh
|
|
ora b
|
|
mov m,a
|
|
inx h
|
|
mov m,e
|
|
inx h
|
|
dcr c
|
|
jnz X1c8b
|
|
ret
|
|
|
|
X1c9f: mvi m,7fh
|
|
mov d,h
|
|
mov e,l
|
|
inx h
|
|
mov a,d
|
|
ani 0fh
|
|
ori 70h
|
|
mov m,a
|
|
inx h
|
|
mov m,e
|
|
ret
|
|
X1cad:
|
|
db 'SET-UP A',0
|
|
X1cb6:
|
|
db 'TO EXIT PRESS ',022h,'SET-UP',022h,0
|
|
call X1bba
|
|
jmp X0fc8
|
|
|
|
X1cd3: call X1ccd
|
|
call X1bc0
|
|
push h
|
|
mvi a,4eh
|
|
call X0fcb
|
|
pop h
|
|
push h
|
|
inx h
|
|
inx h
|
|
mvi e,0
|
|
mvi b,4
|
|
in 42h
|
|
ani 8
|
|
push psw
|
|
jz X1cf0
|
|
inr b
|
|
X1cf0: mvi c,4
|
|
X1cf2: call X1dcc
|
|
ori 0b0h
|
|
mov m,a
|
|
inr e
|
|
inx h
|
|
dcr c
|
|
jnz X1cf2
|
|
mvi c,4
|
|
X1d00: mvi m,0
|
|
inr e
|
|
inx h
|
|
dcr c
|
|
jnz X1d00
|
|
dcr b
|
|
jnz X1cf0
|
|
mvi c,4
|
|
pop psw
|
|
push psw
|
|
jnz X1d17
|
|
mov a,c
|
|
adi 8
|
|
mov c,a
|
|
X1d17: mvi m,0
|
|
inx h
|
|
dcr c
|
|
jnz X1d17
|
|
lxi d,X1d4b
|
|
lda X21ab
|
|
call X1d61
|
|
lxi d,X1d56
|
|
lda X21ac
|
|
call X1d61
|
|
call X1c9f
|
|
lxi d,8
|
|
mvi c,4
|
|
pop psw
|
|
jz X1d3d
|
|
inr c
|
|
X1d3d: mvi a,31h
|
|
pop h
|
|
X1d40: mov m,a
|
|
inr a
|
|
dad d
|
|
dcr c
|
|
jnz X1d40
|
|
xra a
|
|
jmp X1c60
|
|
|
|
X1d4b: db 20h
|
|
db 20h
|
|
db 20h
|
|
mov d,h
|
|
db 20h
|
|
mov d,e
|
|
mov d,b
|
|
mov b,l
|
|
mov b,l
|
|
mov b,h
|
|
db 20h
|
|
X1d56: db 20h
|
|
db 20h
|
|
db 20h
|
|
mov d,d
|
|
db 20h
|
|
mov d,e
|
|
mov d,b
|
|
mov b,l
|
|
mov b,l
|
|
mov b,h
|
|
db 20h
|
|
X1d61: mov c,a
|
|
mvi b,0bh
|
|
call memmove
|
|
mov a,c
|
|
rrc
|
|
rrc
|
|
mov c,a
|
|
rrc
|
|
rrc
|
|
add c
|
|
mov c,a
|
|
mvi b,0
|
|
lxi d,X1d7c
|
|
xchg
|
|
dad b
|
|
xchg
|
|
mvi b,5
|
|
jmp memmove
|
|
|
|
X1d7c: db 20h
|
|
db 20h
|
|
db 20h
|
|
dcr m
|
|
db 30h
|
|
db 20h
|
|
db 20h
|
|
db 20h
|
|
stc
|
|
dcr m
|
|
db 20h
|
|
db 20h
|
|
lxi sp,X3031
|
|
db 20h
|
|
db 20h
|
|
lxi sp,X3433
|
|
db 20h
|
|
db 20h
|
|
lxi sp,X3035
|
|
db 20h
|
|
db 20h
|
|
sta X3030
|
|
db 20h
|
|
db 20h
|
|
inx sp
|
|
db 30h
|
|
db 30h
|
|
db 20h
|
|
db 20h
|
|
mvi m,30h
|
|
db 30h
|
|
db 20h
|
|
lxi sp,X3032
|
|
db 30h
|
|
db 20h
|
|
lxi sp,X3038
|
|
db 30h
|
|
db 20h
|
|
sta X3030
|
|
db 30h
|
|
db 20h
|
|
sta X3034
|
|
db 30h
|
|
db 20h
|
|
inx sp
|
|
mvi m,30h
|
|
db 30h
|
|
db 20h
|
|
inr m
|
|
db 38h
|
|
db 30h
|
|
db 30h
|
|
db 20h
|
|
dad sp
|
|
mvi m,30h
|
|
db 30h
|
|
lxi sp,X3239
|
|
db 30h
|
|
db 30h
|
|
X1dcc: push h
|
|
lxi h,X21a6
|
|
mov d,e
|
|
mov a,e
|
|
call X0e2b
|
|
ana m
|
|
pop h
|
|
rz
|
|
mvi a,1
|
|
ret
|
|
|
|
X1ddb: lda X21ac
|
|
ani 0f0h
|
|
rrc
|
|
rrc
|
|
rrc
|
|
rrc
|
|
mov b,a
|
|
lda X21ab
|
|
ani 0f0h
|
|
ora b
|
|
sta X2158
|
|
ani 0f0h
|
|
cpi 20h
|
|
lda X21a4
|
|
jz X1dff
|
|
ani 3fh
|
|
ori 80h
|
|
jmp X1e03
|
|
|
|
X1dff: ani 3fh
|
|
ori 0c0h
|
|
X1e03: sta X21a4
|
|
in 42h
|
|
ani 8
|
|
jz X1e19
|
|
lxi h,X21a7
|
|
mov a,m
|
|
ori 10h
|
|
mov m,a
|
|
mvi a,6eh
|
|
jmp X1e31
|
|
|
|
X1e19: lda X21a9
|
|
ani 0c0h
|
|
mov b,a
|
|
lda X21a9
|
|
ani 20h
|
|
rrc
|
|
ori 20h
|
|
ora b
|
|
rrc
|
|
rrc
|
|
mov b,a
|
|
lda X21a4
|
|
ani 0c3h
|
|
ora b
|
|
X1e31: sta X21a4
|
|
lda X21a9
|
|
ani 10h
|
|
jz X1e3e
|
|
mvi a,10h
|
|
X1e3e: adi 20h
|
|
sta X207c
|
|
lda X21a6
|
|
ani 10h
|
|
jz X1e4d
|
|
mvi a,1
|
|
X1e4d: call X1e6e
|
|
call X0329
|
|
lda X20f8
|
|
cpi 15h
|
|
cz X0342
|
|
cpi 1dh
|
|
cz X0342
|
|
cpi 0ch
|
|
cz X0bf2
|
|
cpi 12h
|
|
cz X0bf2
|
|
call X1636
|
|
ret
|
|
|
|
X1e6e: ora a
|
|
jz X1e79
|
|
sta X215b
|
|
xra a
|
|
jmp X1e94
|
|
|
|
X1e79: in 42h
|
|
ani 2
|
|
jnz X1e90
|
|
sta X2159
|
|
mvi a,1
|
|
sta X215b
|
|
mvi a,2
|
|
sta X215a
|
|
jmp X036b
|
|
|
|
X1e90: xra a
|
|
sta X215b
|
|
X1e94: sta X215a
|
|
mvi a,80h
|
|
sta X2159
|
|
jmp X036b
|
|
|
|
X1e9f: call X1edd
|
|
lxi h,X217b
|
|
mov m,a
|
|
inx h
|
|
shld X21b4
|
|
mov b,a
|
|
lxi d,20 ; DE = 20(0x0014)
|
|
call memset ; call memset(0x1083)
|
|
lxi h,X1eb8
|
|
shld X2140
|
|
ret
|
|
|
|
X1eb8: call X1edd
|
|
lhld X21b4
|
|
mov b,a
|
|
lda X217b
|
|
mov c,a
|
|
cmp b
|
|
jz X1ed3
|
|
mov a,l
|
|
cpi 90h
|
|
jz X1ed3
|
|
mov m,b
|
|
inx h
|
|
shld X21b4
|
|
ret
|
|
|
|
X1ed3: mov m,c
|
|
call X1ccd
|
|
call X094b
|
|
jmp X1bb0
|
|
|
|
X1edd: push psw
|
|
cpi 20h
|
|
jnc X1ee5
|
|
mvi a,1
|
|
X1ee5: call X05e3
|
|
pop psw
|
|
ret
|
|
|
|
X1eea: push h
|
|
lxi h,scratch_start ; HL -> 0x204e
|
|
mov c,a
|
|
lda X21a2
|
|
ora a
|
|
jnz X1efc
|
|
mov a,c
|
|
cpi 50h
|
|
jp X1f0f
|
|
X1efc: mov a,m
|
|
inx h
|
|
mov h,m
|
|
mov l,a
|
|
mov a,h
|
|
ani 0fh
|
|
ori 20h
|
|
mov h,a
|
|
mov a,c
|
|
add l
|
|
mov l,a
|
|
jnc X1f0d
|
|
inr h
|
|
X1f0d: mov m,b
|
|
mov a,b
|
|
X1f0f: pop h
|
|
ret
|
|
|
|
X1f11: push d
|
|
xra a
|
|
sta X21a5
|
|
mvi b,0
|
|
X1f18: mov a,b
|
|
sta X2158
|
|
out 2
|
|
mvi c,1
|
|
X1f20: mov a,c
|
|
out 0
|
|
lxi h,Xc000
|
|
X1f26: push b
|
|
push h
|
|
call X0675
|
|
pop h
|
|
pop b
|
|
jnz X1f48
|
|
inx h
|
|
mov a,h
|
|
ora l
|
|
jnz X1f26
|
|
X1f36: mvi a,5
|
|
out 1
|
|
lda X2158
|
|
out 2
|
|
mvi a,25h
|
|
sta X21a5
|
|
xra a
|
|
stc
|
|
pop d
|
|
ret
|
|
|
|
X1f48: ani 7fh
|
|
cmp c
|
|
jnz X1f36
|
|
mov a,c
|
|
rlc
|
|
cpi 80h
|
|
mov c,a
|
|
jnz X1f20
|
|
mov a,b
|
|
adi 11h
|
|
mov b,a
|
|
cpi 10h
|
|
jnz X1f18
|
|
xra a
|
|
pop d
|
|
ret
|
|
|
|
X1f62: push d
|
|
mvi d,7
|
|
X1f65: mov a,d
|
|
call X1f7b
|
|
call X1fa1
|
|
cmp d
|
|
jnz X1f36
|
|
dcr d
|
|
jnz X1f65
|
|
mvi a,5
|
|
out 1
|
|
xra a
|
|
pop d
|
|
ret
|
|
|
|
X1f7b: mov b,a
|
|
ani 2
|
|
rrc
|
|
rrc
|
|
rrc
|
|
rrc
|
|
ori 10h
|
|
sta X21c9
|
|
out 62h
|
|
mvi c,5
|
|
mov a,b
|
|
ani 1
|
|
jz X1f93
|
|
mvi c,25h
|
|
X1f93: mov a,b
|
|
ani 4
|
|
jz X1f9d
|
|
mov a,c
|
|
ori 2
|
|
mov c,a
|
|
X1f9d: mov a,c
|
|
out 1
|
|
ret
|
|
|
|
X1fa1: in 22h
|
|
mov b,a
|
|
mvi c,1
|
|
mov a,b
|
|
ani 90h
|
|
jz X1fb3
|
|
cpi 90h
|
|
mvi a,0ffh
|
|
rnz
|
|
mvi c,0
|
|
X1fb3: mov a,b
|
|
ani 40h
|
|
jz X1fbd
|
|
mov a,c
|
|
ori 2
|
|
mov c,a
|
|
X1fbd: in 1
|
|
rrc
|
|
rrc
|
|
cma
|
|
ani 20h
|
|
xra b
|
|
ani 20h
|
|
mvi a,0ffh
|
|
rnz
|
|
mov a,b
|
|
ani 20h
|
|
jnz X1fd4
|
|
mov a,c
|
|
ori 4
|
|
mov c,a
|
|
X1fd4: ora a
|
|
mov a,c
|
|
ret
|
|
|
|
; Last but not least, pad out to 8K (8192) bytes
|
|
|
|
org 1fffh
|
|
nop
|
|
|
|
; Miscellaneous equates
|
|
|
|
; These are addresses referenced in the code but
|
|
; which are in the middle of a multibyte instruction
|
|
; or are addresses outside the initialized space
|
|
|
|
X0011 equ 11h
|
|
X00ff equ 0ffh
|
|
X0111 equ 111h
|
|
X0113 equ 113h
|
|
X0ea0 equ 0ea0h
|
|
X1ccd equ 1ccdh
|
|
X2001 equ 2001h
|
|
X2002 equ 2002h
|
|
X2004 equ 2004h
|
|
X2050 equ 2050h
|
|
X2051 equ 2051h
|
|
X2052 equ 2052h
|
|
X2054 equ 2054h
|
|
X2056 equ 2056h
|
|
X2058 equ 2058h
|
|
X205a equ 205ah
|
|
X205b equ 205bh
|
|
X205c equ 205ch
|
|
X2065 equ 2065h
|
|
X2067 equ 2067h
|
|
X2069 equ 2069h
|
|
X2072 equ 2072h
|
|
X2073 equ 2073h
|
|
X2074 equ 2074h
|
|
X2075 equ 2075h
|
|
X2077 equ 2077h
|
|
X2078 equ 2078h
|
|
X2079 equ 2079h
|
|
X207a equ 207ah
|
|
X207b equ 207bh
|
|
X207c equ 207ch
|
|
X207d equ 207dh
|
|
X207e equ 207eh
|
|
X207f equ 207fh
|
|
X20c0 equ 20c0h
|
|
X20c1 equ 20c1h
|
|
X20c2 equ 20c2h
|
|
X20de equ 20deh
|
|
X20f2 equ 20f2h
|
|
X20f4 equ 20f4h
|
|
X20f5 equ 20f5h
|
|
X20f8 equ 20f8h
|
|
X20f9 equ 20f9h
|
|
X20fa equ 20fah
|
|
X20fb equ 20fbh
|
|
X20fc equ 20fch
|
|
X20fd equ 20fdh
|
|
X20ff equ 20ffh
|
|
X2101 equ 2101h
|
|
X2102 equ 2102h
|
|
X2104 equ 2104h
|
|
X210d equ 210dh
|
|
X210e equ 210eh
|
|
X2111 equ 2111h
|
|
X2113 equ 2113h
|
|
X212b equ 212bh
|
|
X212c equ 212ch
|
|
X212f equ 212fh
|
|
X2130 equ 2130h
|
|
X2131 equ 2131h
|
|
X2140 equ 2140h
|
|
X2142 equ 2142h
|
|
X2143 equ 2143h
|
|
X2144 equ 2144h
|
|
X2145 equ 2145h
|
|
X2146 equ 2146h
|
|
X2147 equ 2147h
|
|
X2148 equ 2148h
|
|
X2149 equ 2149h
|
|
X214b equ 214bh
|
|
X214e equ 214eh
|
|
X2150 equ 2150h
|
|
X2151 equ 2151h
|
|
X2152 equ 2152h
|
|
X2153 equ 2153h
|
|
X2154 equ 2154h
|
|
X2155 equ 2155h
|
|
X2156 equ 2156h
|
|
X2157 equ 2157h
|
|
X2158 equ 2158h
|
|
X2159 equ 2159h
|
|
X215a equ 215ah
|
|
X215b equ 215bh
|
|
X215c equ 215ch
|
|
X2171 equ 2171h
|
|
X2172 equ 2172h
|
|
X2173 equ 2173h
|
|
X2174 equ 2174h
|
|
X2176 equ 2176h
|
|
X2177 equ 2177h
|
|
X2178 equ 2178h
|
|
X2179 equ 2179h
|
|
X217b equ 217bh
|
|
X2191 equ 2191h
|
|
X21a2 equ 21a2h
|
|
X21a3 equ 21a3h
|
|
X21a4 equ 21a4h
|
|
X21a5 equ 21a5h
|
|
X21a6 equ 21a6h
|
|
X21a7 equ 21a7h
|
|
X21a8 equ 21a8h
|
|
X21a9 equ 21a9h
|
|
X21aa equ 21aah
|
|
X21ab equ 21abh
|
|
X21ac equ 21ach
|
|
X21ad equ 21adh
|
|
X21ae equ 21aeh
|
|
X21af equ 21afh
|
|
X21b4 equ 21b4h
|
|
X21b8 equ 21b8h
|
|
X21b9 equ 21b9h
|
|
X21bb equ 21bbh
|
|
X21bc equ 21bch
|
|
X21bd equ 21bdh
|
|
X21be equ 21beh
|
|
X21bf equ 21bfh
|
|
X21c0 equ 21c0h
|
|
X21c1 equ 21c1h
|
|
X21c2 equ 21c2h
|
|
X21c3 equ 21c3h
|
|
X21c4 equ 21c4h
|
|
X21c5 equ 21c5h
|
|
X21c7 equ 21c7h
|
|
X21c8 equ 21c8h
|
|
X21c9 equ 21c9h
|
|
X21cb equ 21cbh
|
|
X21cc equ 21cch
|
|
X21d3 equ 21d3h
|
|
X2253 equ 2253h
|
|
X225a equ 225ah
|
|
X2265 equ 2265h
|
|
X22d0 equ 22d0h
|
|
X2839 equ 2839h
|
|
X3030 equ 3030h
|
|
X3031 equ 3031h
|
|
X3032 equ 3032h
|
|
X3034 equ 3034h
|
|
X3035 equ 3035h
|
|
X3038 equ 3038h
|
|
X3200 equ 3200h
|
|
X3221 equ 3221h
|
|
X3239 equ 3239h
|
|
X3433 equ 3433h
|
|
X3a6a equ 3a6ah
|
|
X3c08 equ 3c08h
|
|
X3c2c equ 3c2ch
|
|
X3f2f equ 3f2fh
|
|
X401b equ 401bh
|
|
X4553 equ 4553h
|
|
X5a0b equ 5a0bh
|
|
X6081 equ 6081h
|
|
X6713 equ 6713h
|
|
X6c14 equ 6c14h
|
|
X7fd0 equ 7fd0h
|
|
Xb709 equ 0b709h
|
|
Xc000 equ 0c000h
|
|
Xc310 equ 0c310h
|
|
Xc320 equ 0c320h
|
|
Xc920 equ 0c920h
|
|
Xc940 equ 0c940h
|
|
Xc980 equ 0c980h
|
|
Xcc71 equ 0cc71h
|
|
Xcd00 equ 0cd00h
|
|
Xcd0b equ 0cd0bh
|
|
Xd0f2 equ 0d0f2h
|
|
Xfe1a equ 0fe1ah
|
|
Xff01 equ 0ff01h
|
|
|
|
end
|