jewel-of-kaldun/shapes.s

397 lines
12 KiB
ArmAsm
Executable File

* External references
; jewel.of.kaldun.s
;DATA EXT
********************************
* Jewel of Kaldun shape *
* drawing routines. *
* Uses: GRAPHICS *
* MATH *
* MATH.MAC *
* GENERAL.MAC *
********************************
SHTABLE DFB %00000000 ; Shape #0: Blank space
DFB %00000000
DFB %00000000
DFB %00000000
DFB %00000000
DFB %00000000
DFB %00000000
DFB %00000000
DFB %11111111 ; Shape #1: Wall
DFB %11111111
DFB %11111111
DFB %11111111
DFB %11111111
DFB %11111111
DFB %11111111
DFB %11111111
DFB %00111100 ; Shape #2: Meltok
DFB %00111100
DFB %00011000
DFB %11111111
DFB %00011000
DFB %00111100
DFB %00100100
DFB %01100110
DFB %11111111 ; Shape #3: Door (unlocked)
DFB %11111111
DFB %11100111
DFB %11000011
DFB %11000011
DFB %11000011
DFB %11000011
DFB %11000011
DFB %11111111 ; Shape #4: Locked Door
DFB %11111111
DFB %11100111
DFB %11000011
DFB %11000011
DFB %11010011
DFB %11000011
DFB %11000011
DFB %11111111 ; Shape #5: Secret Door (found)
DFB %11100111
DFB %11011011
DFB %11011011
DFB %11011011
DFB %11011011
DFB %11011011
DFB %11011011
DFB %00000000 ; Shape #6: Chest
DFB %00000000
DFB %00111100
DFB %01100110
DFB %01111110
DFB %01100110
DFB %01100110
DFB %01111110
DFB %00000000 ; Shape #7: Opened Chest
DFB %00001100
DFB %00000110
DFB %00000110
DFB %01111110
DFB %01100110
DFB %01100110
DFB %01111110
DFB %00000000 ; Shape #8: Ladder
DFB %01100110
DFB %01111110
DFB %01100110
DFB %01111110
DFB %01100110
DFB %01111110
DFB %01100110
DFB %00000000 ; Shape #9: Throne
DFB %00000110
DFB %00000110
DFB %00000110
DFB %01111110
DFB %01100110
DFB %01100110
DFB %01100110
DFB %00011000 ; Shape #10: Jewel of Kaldun
DFB %00111100
DFB %00111100
DFB %00011000
DFB %11000011
DFB %01111110
DFB %00011000
DFB %00111100
DFB %00000000 ; Shape #11: Empty Holder
DFB %00000000 ; (Jewel of Kaldun gone)
DFB %00000000
DFB %00000000
DFB %11000011
DFB %01111110
DFB %00011000
DFB %00111100
DFB %00000000 ; Shape #12: Ghost
DFB %00111100
DFB %01111110
DFB %01101010
DFB %01111110
DFB %01111110
DFB %01011010
DFB %00000000
DFB %00000000 ; Shape #13: Blob
DFB %01100110
DFB %00101100
DFB %00111100
DFB %01111110
DFB %01010110
DFB %01000100
DFB %00000000
DFB %00000000 ; Shape #14: Zombie
DFB %00011000
DFB %01111110
DFB %00011000
DFB %00111100
DFB %01100110
DFB %01100110
DFB %00000000
DFB %00000000 ; Shape #15: Circle
DFB %00111100
DFB %01111110
DFB %01111110
DFB %01111110
DFB %01111110
DFB %00111100
DFB %00000000
DFB %00000000 ; Shape #16: Dot
DFB %00000000
DFB %00000000
DFB %00011000
DFB %00011000
DFB %00000000
DFB %00000000
DFB %00000000
DFB %10101010 ; Shape #17: Half wall (fade-in)
DFB %01010101
DFB %10101010
DFB %01010101
DFB %10101010
DFB %01010101
DFB %10101010
DFB %01010101
DFB %01010101 ; Shape #18: Half wall (fade-in)
DFB %10101010
DFB %01010101
DFB %10101010
DFB %01010101
DFB %10101010
DFB %01010101
DFB %10101010
DFB %01111111 ; Shape #19: Letter "R"
DFB %11000011
DFB %11000011
DFB %11000011
DFB %01111111
DFB %00110011
DFB %01100011
DFB %11000011
DFB %11111111 ; Shape #20: Letter "I"
DFB %00011000
DFB %00011000
DFB %00011000
DFB %00011000
DFB %00011000
DFB %00011000
DFB %11111111
DFB %01111111 ; Shape #21: Letter "P"
DFB %11000011
DFB %11000011
DFB %11000011
DFB %01111111
DFB %00000011
DFB %00000011
DFB %00000011
DFB %11111111 ; Shape #22: Barred Door
DFB %11111111
DFB %11100111
DFB %11000011
DFB %11111111
DFB %11000011
DFB %11111111
DFB %11000011
********************************
* Shape draw variables *
********************************
XOFFSET HEX 0000
XLOC HEX 0000
YLOC HEX 00
SNUM ENT
HEX 0000
DRAWREP HEX 00
CLRFLAG ENT
DFB %10000000 ; flag for clearing background
XORFLAG ENT
DFB %00000000 ; flag to XOR with background
BITMASK DFB %01111111,%00111111 ; bits to keep for
DFB %00011111,%00001111 ; offset values
DFB %00000111,%00000011
DFB %00000001
BITABLE1 DFB %00000000,%00000001 ; bits to keep in 1st
DFB %00000011,%00000111 ; graphic byte
DFB %00001111,%00011111
DFB %00111111
BITABLE2 DFB %01111110,%01111100 ; bits to keep in 2nd
DFB %01111000,%01110000 ; graphicbyte
DFB %01100000,%01000000
DFB %00000000
********************************
* Draw a shape routine. Upon *
* entry: *
* X-axis: AAXX *
* Y-axis: YY *
* Shape Num: preset *
********************************
DRAWSHAP ENT
STA XLOC+1 ; save entry values:
STX XLOC ; xval = XXAA
STY YLOC ; yval = YY
STY HLINE
IMULW #8;SNUM;DATA
ADDW DATA;#SHTABLE;DATA
IDIVMODW XLOC;#7;XLOC;XOFFSET ; calc offset(s)
MOVB #8;DRAWREP
:REPEAT JSR HADDR
LDX XOFFSET
LDY XLOC
CPY #40
BGE :SECOND
BIT CLRFLAG
BPL :20
LDA BITABLE1,X
AND (HPTR),Y
STA (HPTR),Y
:20 LDY #0
LDA BITMASK,X
STA BITSTORE
AND (DATA),Y
LDX XOFFSET
:10 CPX #0
BEQ :11
ASL
DEX
JMP :10
:11 LDY XLOC
BIT XORFLAG
BMI :2X1
ORA (HPTR),Y
JMP :2X2
:2X1 EOR (HPTR),Y
:2X2 STA (HPTR),Y
:SECOND LDX XOFFSET
LDY XLOC
INY
CPY #40
BGE :NOTGOOD
BIT CLRFLAG
BPL :30
LDA BITABLE2,X
AND (HPTR),Y
STA (HPTR),Y
:30 LDY #0
LDA BITSTORE
EOR #%11111111
AND (DATA),Y
LDX XOFFSET
:0 CPX #7
BGE :1
LSR
INX
JMP :0
:1 LDY XLOC
INY
BIT XORFLAG
BMI :3X1
ORA (HPTR),Y
JMP :3X2
:3X1 EOR (HPTR),Y
:3X2 STA (HPTR),Y
:NOTGOOD INC DATA
BNE :2
INC DATA+1
:2 INC HLINE
DEC DRAWREP
BNE :REPEATX
RTS
:REPEATX JMP :REPEAT
BITSTORE HEX 00
* NOTE: This is a hack. -8 is treated as 8 bits by Merlin32;
* thus the MOVW is in error. Using the value of $FFF8
* because my trusty PC calculator tells me that is correct. :-)
ARRIVEC2 MOVW #$FFF8;XMELTOK
MOVB #2;SNUM
LDA #%00000000
STA CLRFLAG
LDA #%10000000
STA XORFLAG
:REPEAT LDY #151
LDA XMELTOK+1
LDX XMELTOK
JSR DRAWSHAP
LDA #70
JSR WAIT
LDY #151
LDA XMELTOK+1
LDX XMELTOK
JSR DRAWSHAP
INC XMELTOK
BNE :1
INC XMELTOK+1
:1 LDA XMELTOK+1
CMP #>71
BNE :REPEAT
LDA XMELTOK
CMP #<71
BNE :REPEAT
BEQ COMMONCX
XMELTOK HEX 0000
LEAVEC1 MOVW #131;XMELTOK
MOVB #2;SNUM
LDA #%00000000
STA CLRFLAG
LDA #%10000000
STA XORFLAG
:REPEAT LDY #151
LDA XMELTOK+1
LDX XMELTOK
JSR DRAWSHAP
LDA #70
JSR WAIT
LDY #151
LDA XMELTOK+1
LDX XMELTOK
JSR DRAWSHAP
INC XMELTOK
BNE :1
INC XMELTOK+1
:1 LDA XMELTOK+1
CMP #>280
BNE :REPEAT
LDA XMELTOK
CMP #<280
BNE :REPEAT
COMMONCX LDY #151
LDX XMELTOK
LDA XMELTOK+1
JSR DRAWSHAP
LDA #%10000000
STA CLRFLAG
LDA #%00000000
STA XORFLAG
RTS