Login

Subversion Repositories NedoOS

Rev

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