Rev 1031 |
Blame |
Compare with Previous |
Last modification |
View Log
| Download
| RSS feed
;4000 - ╤Б╤В╤А╨░╨╜╨╕╤Ж╨░ ╨║╨╛╨╝╨░╨╜╨┤ (╨╝╨╛╨╢╨╡╤В ╨┐╨╛╨┤╨╝╨╡╨╜╤П╤В╤М╤Б╤П ╨┐╤А╨╕ ╨┤╨╛╤Б╤В╤Г╨┐╨╡ ╨║ ╨┤╨░╨╜╨╜╤Л╨╝, ╨╜╨╛ ╨┐╨╛╤В╨╛╨╝ ╨▓╤Л╨╖╤Л╨▓╨░╨╡╤В╤Б╤П OUTcom)
;8000,c000 - ╤Б╤В╤А╨░╨╜╨╕╤Ж╤Л ╨▓ 8000,c000
;(╨┤╨╗╤П extpg5) putmem ╨▓╤Б╨╡╨│╨┤╨░ ╨┐╨╕╤И╨╡╤В ╤З╨╡╤А╨╡╨╖ ╤А╨╡╨│╨╕╤Б╤В╤А C! ╤В╨░╨║ ╨╝╨╛╨╢╨╜╨╛ ╨┐╨╡╤А╨╡╤Е╨▓╨░╤В╤Л╨▓╨░╤В╤М ╨╖╨░╨┐╨╕╤Б╤М ╨▓ ╤Н╨║╤А╨░╨╜
MACRO get
LD A,(DE)
ENDM
MACRO getHL
get
next
LD L,A
get
next
LD H,A
ENDM
MACRO next
inc e
call z,next_incd
ENDM
MACRO OUTcom ;╨╡╤Б╨╗╨╕ ╨▓╨╝╨╡╤Б╤В╨╛ ╤Б╤В╤А.╨║╨╛╨╝╨░╨╜╨┤ ╨▓╨║╨╗╤О╤З╨╕╨╗╨╕ ╨┤╤А.╤Б╤В╤А.
;LD HL,(curquart)
;LD A,(HL)
;OUTPGCOM
call set4000com ;╨┐╤А╨╛╤Б╨║╨░╨║╨╕╨▓╨░╨╡╤В, ╨╡╤Б╨╗╨╕ 4000 ╨╜╨╡ ╤Й╤С╨╗╨║╨░╨╗╨╕
ENDM
;╨▓╨░╤А╨╕╨░╨╜╤В ╤Б call nc ╨┐╨╛╤Б╨╗╨╡ ╨▒╨╛╨╗╤М╤И╨╕╨╜╤Б╤В╨▓╨░ ╨║╨╛╨╝╨░╨╜╨┤, ╤А╨░╨▒╨╛╤В╨░╤О╤Й╨╕╤Е ╤Б ╨┐╨░╨╝╤П╤В╤М╤О, ╨▓ CY ╤Б╨╛╤Е╤А╨░╨╜╨╕╨╗╤Б╤П ╤Б╤В╨░╤А╤И╨╕╨╣ ╨▒╨╕╤В ╨░╨┤╤А╨╡╤Б╨░
MACRO OUTcomCY15 ;╨╡╤Б╨╗╨╕ ╨▓╨╝╨╡╤Б╤В╨╛ ╤Б╤В╤А.╨║╨╛╨╝╨░╨╜╨┤ ╨▓╨║╨╗╤О╤З╨╕╨╗╨╕ ╨┤╤А.╤Б╤В╤А.
;LD HL,(curquart)
;LD A,(HL)
;OUTPGCOM
call nc,set4000com ;╨┐╤А╨╛╤Б╨║╨░╨║╨╕╨▓╨░╨╡╤В, ╨╡╤Б╨╗╨╕ 4000 ╨╜╨╡ ╤Й╤С╨╗╨║╨░╨╗╨╕
ENDM
MACRO CALCpgcom ;╨╕╨╖╨╝╨╡╨╜╨╕╨╗╨░╤Б╤М ╨║╨╛╨╜╤Д╨╕╨│╤Г╤А╨░╤Ж╨╕╤П ╨┐╨░╨╝╤П╤В╨╕, ╨╜╨░╨┤╨╛ ╨▓╨║╨╗╤О╤З╨╕╤В╤М ╤Б╤В╤А╨░╨╜╨╕╤Ж╤Г ╨┤╨╗╤П DE(PC)
;LD HL,(curquart)
;LD A,(HL)
;OUTPGCOM
call set4000com ;╨┐╤А╨╛╤Б╨║╨░╨║╨╕╨▓╨░╨╡╤В, ╨╡╤Б╨╗╨╕ 4000 ╨╜╨╡ ╤Й╤С╨╗╨║╨░╨╗╨╕
ENDM
;╨┐╨╡╤А╨╡╨┤ JR/CALL/RST (╨╜╨░ ╨▓╤Е╨╛╨┤╨╡ - ╤Г╤А╨╡╨╖╨░╨╜╨╜╤Л╨╣ DE(PC), ╨░ ╨╜╨░╨┤╨╛ ╨┐╨╛╨╗╤Г╤З╨╕╤В╤М ╨┐╨╛╨╗╨╜╤Л╨╣)
MACRO CALCpc
LD A,(curquart) ;╨╛╨┤╨╕╨╜ ╨╕╨╖ 4 ╨░╨┤╤А╨╡╤Б╨╛╨▓ ╨┐╨╛╨┤╤А╤П╨┤, ╨│╨┤╨╡ ╨╗╨╡╨╢╨░╤В ╤В╨╡╨║╤Г╤Й╨╕╨╡ ╤Б╤В╤А╨░╨╜╨╕╤Ж╤Л ╨▓ ╨╛╨║╨╜╨░╤Е ;a=0,1,2,3 for 4000,8000,c000,0000
RRCA
RRCA ;a=0x00,0x40,0x80,0xc0 for 4000,8000,c000,0000
add a,d ;d=0x40+
LD D,A ;0x40,0x80,0xC0,0x00 for 4000,8000,c000,0000
ENDM
;╨┐╨╛╤Б╨╗╨╡ JR/JP/CALL/RST/RET (╨╜╨░ ╨▓╤Е╨╛╨┤╨╡ - ╨┐╨╛╨╗╨╜╤Л╨╣ DE(PC), ╨░ ╨╜╨░╨┤╨╛ ╨┐╨╛╨╗╤Г╤З╨╕╤В╤М ╤Г╤А╨╡╨╖╨░╨╜╨╜╤Л╨╣)
;╨▓ ╤Б╨╗╤Г╤З╨░╨╡ CALL/RST/RET ╨╝╨╛╨│╨╗╨░ ╨┐╨╛╨┤╨╝╨╡╨╜╨╕╤В╤М╤Б╤П 4000
MACRO CALCiypgcom
ld a,d
rlca
rlca
dec a
and 3 ;a=0,1,2,3 for 4000,8000,c000,0000
res 7,d
set 6,d
ld (curquart),a
ld l,a
ld h,emulcurpg0000/256
LD A,(HL)
OUTPGCOM
ld a,0xc9
ld (set4000com),a
ENDM
;╨┐╨╛╤А╤В╨╕╤В HL,BC!
MACRO mem ;page [hl], ╨╜╨░ ╨▓╤Л╤Е╨╛╨┤╨╡ CY=A15
ld a,h
add a,a
call nc,setmem00004000
ENDM
MACRO getmem ;a<=[hl], ╨╜╨░ ╨▓╤Л╤Е╨╛╨┤╨╡ CY=A15
mem
LD A,(HL)
ENDM
;╨┐╨╛╤А╤В╨╕╤В BC! ╨╜╨░ ╨▓╤Л╤Е╨╛╨┤╨╡ CY=A15
MACRO putmem ;a<=[hl]
ld c,a
ld a,h
add a,a
call nc,setmem00004000writec
if extpg5
call c,setmem8000c000writec
else
ld (hl),c
endif
ENDM
;╨┐╨╛╤А╤В╨╕╤В HL,A! ╨╜╨░ ╨▓╤Л╤Е╨╛╨┤╨╡ CY=A15
MACRO getmemBC
ld a,h
add a,a
call nc,setmem00004000
LD C,(HL)
INC L
JP NZ,1f;q ;╨▓╨╜╤Г╤В╤А╨╕ mem ╨╜╨╡╤В ╨╝╨╡╤В╨║╨╕ 1
rra
ld h,a
INC h
mem
1;q
LD B,(HL)
ENDM
;╨┐╨╛╤А╤В╨╕╤В HL,A! ╨╜╨░ ╨▓╤Л╤Е╨╛╨┤╨╡ CY=A15
MACRO putmemBC
ld a,h
add a,a
call nc,setmem00004000writec
if extpg5
call c,setmem8000c000writec
else
ld (hl),c
endif
ld c,b
if extpg5
rra
ld h,a
inc hl
else
INC L
JP NZ,1f;q
rra
ld h,a
INC h
endif
ld a,h
add a,a
call nc,setmem00004000writec
if extpg5
call c,setmem8000c000writec
endif
1;q
if !extpg5
ld (hl),c
endif
ENDM