ProjectSPECCY icon

Spectrum Sprite Hacker

ProjectSPECCY | PRO | 10/21/17 07:32:23 AM UTC | 0 ⭐ | 176 👁️ | Never ⏰ | []
Z80 Assembler |

0 B

|

None

|

0 👍

/

0 👎

;Basic Sprite Hacker
;by Steve Smith - www.ProjectSPECCY.com - circa. 1991
;
;Pasmo 0.5.3 source
;
;Load binary into 64000
;Run from there
;
;Keys:
;Q and A - Page up and down
;O and P - Increase and Decrease width
;S and W - Increase and Decrease height
;K and L - Line up and down
;M and N - Byte up and down
;C - Set address
;B - Drop to BASIC (or calling program)
;E - Toggle edit mode
;       Q - Cursor Up
;       A - Cursor Down
;       O - Cursor Left
;       P - Cursor Right
;   Space - Set/reset a pixel
;
;
 
start:
 
ORG 64000
 
INIT:   LD  HL,MEMPO
        LD  (HL),40
        INC HL
        LD  (HL),61
        INC HL
        LD  (HL),45
        INC HL
        LD  (HL),2
        LD  HL,ENDIN-INIT
        LD  (23296),HL      ;Load 23296 with compile time length of code
START:  CALL    CLS
TART:   CALL    DSPLY
KEYLP:  CALL    GETKY
        CP  226
        RET Z
        AND 95
        CP  91
        JR  NC,KEYLP
        CP  65
        JR  C,KEYLP
        SUB 65
        ADD A,A
        LD  HL,TABLE
        LD  E,A
        LD  D,0
        ADD HL,DE
        LD  E,(HL)
        INC HL
        LD  D,(HL)
        EX  DE,HL
SKP:    JP  (HL)
TABLE:  DEFW    UPBLK   ;Up a block (page)
AB:     DEFW    BASIC   ;Drop into BASIC
AC:     DEFW    CHMEM   ;Set memory position
AD:     DEFW    KEYLP
AE:     DEFW    EDIT    ;Edit mode
AAF:    DEFW    KEYLP
AG:     DEFW    KEYLP
AH:     DEFW    KEYLP
AI:     DEFW    KEYLP
AJ:     DEFW    KEYLP
AK:     DEFW    UPWID   ;Up a line
AL:     DEFW    DNWID   ;Down a line
AM:     DEFW    DNBTE   ;Down a byte
AN:     DEFW    UPBTE   ;Up a byte
AO:     DEFW    DNBWD   ;Decrease width
AP:     DEFW    UPBWD   ;Increase width
AQ:     DEFW    DNBLK   ;Down a block (page)
AR:     DEFW    RESET   ;Reset to Spectrum Character Set
AS:     DEFW    UPHGT   ;Increase Height
AT:     DEFW    KEYLP
AU:     DEFW    KEYLP
AV:     DEFW    KEYLP
AW:     DEFW    DNHGT   ;Decrease height
AX:     DEFW    KEYLP
AY:     DEFW    KEYLP
AZ:     DEFW    KEYLP
CLS:    LD  HL,16384
        LD  BC,6143
        LD  DE,16385
        LD  (HL),0
        LDIR
        RET
BLPRN:  PUSH    HL
        PUSH    BC
        PUSH    DE
BPLP1:  PUSH    DE
        CALL    CALC
        PUSH    BC
        LD  B,0
        LDIR
        POP BC
        POP DE
        INC E
        DJNZ    BPLP1
        POP DE
        POP BC
        POP HL
        RET
BLMAG:  PUSH    DE
        PUSH    BC
        CALL    CALC
        CALL    FILL
        LD  B,C
        INC D
LP3:    CALL    T4X3
        INC HL
        DJNZ    LP3
        DEC D
        LD  B,4
LOOP:   LD  A,(DE)
        OR  128
        LD  (DE),A
        INC D
        DJNZ    LOOP
        POP BC
        POP DE
        INC E
        INC E
        INC E
        INC E
        DJNZ    BLMAG
        CALL    CALC
        CALL    FILL
        LD  A,C
        SLA A
        SLA A
        ADD A,E
        LD  E,A
        LD  A,(DE)
        OR  128
        LD  (DE),A
        RET
FILL:   PUSH    BC
        PUSH    DE
        PUSH    HL
        PUSH    DE
        POP HL
        LD  (HL),255
        INC DE
        LD  B,0
        SLA C
        SLA C
        DEC C
        LDIR
        POP HL
        POP DE
        POP BC
        RET
T4X3:   PUSH    BC
        LD  C,(HL)
        LD  B,4
LP2:    CALL    TEST
        PUSH    BC
        LD  B,3
        PUSH    DE
LP1:    LD  (DE),A
        INC D
        DJNZ    LP1
        POP DE
        POP BC
        INC DE
        RL  C
        RL  C
        DJNZ    LP2
        POP BC
        RET
TEST:   LD  A,136
        BIT 7,C
        JR  NZ,SETQ
RESQ:   AND 143
        JR  DN1
SETQ:   OR  112
DN1:    BIT 6,C
        JR  NZ,SETR
RESR:   AND 248
        JR  DN2
SETR:   OR  7
DN2:    RET
CALC:   PUSH    HL
        PUSH    BC
        PUSH    DE
        LD  D,0
        LD  A,E
        CP  64
        JR  C,SCHIG
        CP  128
        JR  C,SCMID
        JR  SCLOW
SCHIG:  LD  HL,16384
        JR  PARTB
SCMID:  LD  HL,18432
        SUB 64
        JR  PARTB
SCLOW:  LD  HL,20480
        SUB 128
PARTB:  LD  E,A
        LD  B,3
CLOOP:  SRL D
        SRL E
        JR  NC,CSKP
        SET 2,D
CSKP:   DJNZ    CLOOP
        SLA E
        SLA E
        SLA E
        SLA E
        SLA E
        ADD HL,DE
        EX  DE,HL
        POP HL
        LD  A,H
        ADD A,E
        LD  E,A
        JR  NC,SKPA
        INC D
SKPA:   POP BC
        POP HL
        RET
DECTB:  PUSH    BC
        PUSH    DE
        EX  DE,HL
        LD  B,5
        LD  HL,0
DECLP:  LD  A,(DE)
        CP  58
        JR  NC,DECED
        CP  48
DECCN:  SUB 48
        ADD HL,HL
        PUSH    HL
        ADD HL,HL
        ADD HL,HL
        POP BC
        ADD HL,BC
        ADD A,L
        LD  L,A
        JR  NC,DECSP
        INC H
DECSP:  INC DE
        JR  DECLP
DECED:  POP DE
        POP BC
        LD  (23296),HL
        RET
GETKY:  XOR A
        LD  (23560),A
GETLP:  LD  A,(23560)
        OR  A
        JR  Z,GETLP
        RET
ENTNM:  PUSH    BC
        PUSH    DE
        LD  A,2
        CALL    5633
        LD  BC,11
        LD  DE,SPACE
        CALL    8252
        POP DE
        LD  HL,NMBUF
        PUSH    HL
        LD  B,5
CLRLP:  LD  (HL),0
        DJNZ    CLRLP
        LD  B,5
        POP HL
ENTLP:  CALL    GETKY
        CP  59
        JR  NC,ENTED
        CP  48
        JR  C,ENTED
        LD  (HL),A
        INC HL
        RST 16
        DJNZ    ENTLP
 
ENTED:  POP DE
        LD  HL,NMBUF
        CALL    DECTB
        RET
MEMPO:  DEFW    0
HGT:    DEFB    0
WID:    DEFB    0
DSPLY:  LD  HL,(MEMPO)
        PUSH    HL
        LD  DE,0
        LD  A,(HGT)
        LD  B,A
        LD  A,(WID)
        LD  C,A
        CALL    BLPRN
        POP HL
        LD  D,11
        LD  E,0
        CALL    BLMAG
        LD  A,2
        CALL    5633
        LD  DE,DMSG
        LD  BC,EDMSG-DMSG
        CALL    8252
        LD  A,22
        RST 16
        LD  A,7
        RST 16
        LD  A,5
        RST 16
        LD  HL,(MEMPO)
        CALL    DSPLP
        LD  A,22
        RST 16
        LD  A,8
        RST 16
        LD  A,5
        RST 16
        CALL    LENDE
        EX  DE,HL
        CALL    DSPLP
        LD  A,22
        RST 16
        LD  A,9
        RST 16
        LD  A,5
        RST 16
        LD  A,(WID)
        LD  H,0
        LD  L,A
        CALL    DSPLP
        LD  A,22
        RST 16
        LD  A,10
        RST 16
        LD  A,5
        RST 16
        LD  A,(HGT)
        LD  H,0
        LD  L,A
        CALL    DSPLP
BASIC:  RET
DSPLP:  XOR A
        PUSH    AF
DSLP3:  CALL    DIV10
        ADD A,48
        PUSH    AF
        LD  A,H
        OR  L
        JR  NZ,DSLP3
DSLP4:  POP AF
        RET Z
        RST 16
        JR  DSLP4
DNBLK:  LD  HL,(MEMPO)
        CALL    LENDE
        SCF
        CCF
        SBC HL,DE
        LD  (MEMPO),HL
        JP  TART
CHMEM:  CALL    ENTNM
        LD  (MEMPO),HL
        JP  TART
UPWID:  LD  A,(WID)
        LD  HL,(MEMPO)
        ADD A,L
        LD  L,A
        JR  NC,UPWDS
        INC H
UPWDS:  LD  (MEMPO),HL
        JP  TART
DNWID:  LD  A,(WID)
        LD  HL,(MEMPO)
        LD  E,A
        LD  D,0
        SCF
        CCF
        SBC HL,DE
        LD  (MEMPO),HL
        JP  TART
DNBTE:  LD  HL,MEMPO
        DEC (HL)
        JP  TART
UPBTE:  LD  HL,MEMPO
        INC (HL)
        JP  TART
UPBWD:  LD  A,(WID)
        CP  5
        JP  Z,START
        INC A
        LD  (WID),A
        JP  START
DNBWD:  LD  A,(WID)
        CP  1
        JP  Z,START
        DEC A
        LD  (WID),A
        JP  START
UPBLK:  LD  HL,(MEMPO)
        CALL    LENDE
        ADD HL,DE
        LD  (MEMPO),HL
        JP  TART
RESET:  JP  INIT
DNHGT:  LD  A,(HGT)
        CP  1
        JP  Z,START
        DEC A
        LD  (HGT),A
        JP  START
UPHGT:  LD  A,(HGT)
        CP  47
        JP  Z,START
        INC A
        LD  (HGT),A
        JP  START
SPACE:  DEFB    22,7,5
        DEFM    "     "
        DEFB    22,7,5
NMBUF:  DEFS    5
DIV10:  PUSH    BC
        PUSH    DE
        LD  DE,0
        LD  BC,10
        XOR A
ALOOP:  INC DE
        SBC HL,BC
        JR  NC,ALOOP
        ADC HL,BC
        DEC DE
        DEC HL
        EX  DE,HL
        LD  A,E
        POP DE
        POP BC
        RET
LENDE:  LD  A,(WID)
        LD  E,A
        LD  A,(HGT)
        LD  B,A
        XOR A
LENLP:  ADD A,E
        DJNZ    LENLP
        LD  D,0
        LD  E,A
        RET
DMSG:   DEFB    22,7,0
        DEFM    "DAT: "
        DEFB    22,8,0
        DEFM    "LEN: "
        DEFB    22,9,0
        DEFM    "WID: "
        DEFB    22,10,0
        DEFM    "HGT: "
EDMSG:
EDIT:   LD  HL,LOC
        LD  (HL),0
        INC HL
        LD  (HL),0
        INC HL
        LD  (HL),128
EDLP1:  CALL    DSPLY
EDLP2:  CALL    EDGET
        CP  "Q"         ;Cursor up
        JR  Z,EDUP
        CP  "A"         ;Cursor down
        JR  Z,EDDN
        CP  "O"         ;Cursor left
        JR  Z,EDLT
        CP  "P"         ;Cursor right
        JR  Z,EDRT
        CP  " "         ;Set/reset pixel in memory
        JR  Z,EDTOG
        CP  "E"         ;Exit edit mode
        JP  Z,TART
        JR  EDLP2
EDUP:   LD  HL,(LOC)
        LD  A,(WID)
        LD  B,0
        LD  C,A
        SCF
        CCF
        SBC HL,BC
        JR  C,EDLP2
        LD  (LOC),HL
        JR  EDLP2
EDDN:   LD  HL,(LOC)
        CALL    LENDE
        LD  A,(WID)
        LD  C,A
        LD  B,0
        ADD HL,BC
        PUSH    HL
        SBC HL,DE
        POP HL
        JR  NC,EDLP2
        LD  (LOC),HL
        JR  EDLP2
EDLT:   LD  HL,LOC
        LD  A,(BITS)
        RLCA
        LD  (BITS),A
        JR  NC,EDLP2
        DEC (HL)
        JR  EDLP2
EDRT:   LD  HL,LOC
        LD  A,(BITS)
        RRCA
        LD  (BITS),A
        JR  NC,EDLP2
        INC (HL)
        JR  EDLP2
EDTOG:  LD  DE,(MEMPO)
        LD  HL,(LOC)
        ADD HL,DE
        LD  A,(BITS)
        XOR (HL)
        LD  (HL),A
        JR  EDLP1
LOC:    DEFW    0
BITS:   DEFB    0
EDGET:  XOR A
        LD  (23560),A
        CALL    FLASH
        CALL    FLASH
        LD  A,(23560)
        OR  A
        JR  Z,EDGET
        RET
FLASH:  LD  HL,(MEMPO)
        LD  DE,(LOC)
        LD  A,(BITS)
        ADD HL,DE
        XOR (HL)
        LD  (HL),A
CALL    DSPLY
        RET
ENDIN:
end start

Comments