initial commit

This commit is contained in:
David Schmenk 2017-04-10 09:24:40 -07:00
parent f7397a9e7d
commit 17ee780eb7
14 changed files with 3669 additions and 0 deletions

BIN
LC3D-DOC.pdf Executable file

Binary file not shown.

BIN
LightCycles.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 284 KiB

BIN
cassette.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 301 KiB

55
cross.asm Executable file
View File

@ -0,0 +1,55 @@
!BYTE 0,4 ; Scanline repeat count
!BYTE 17,128+31,16
!BYTE 0,1 ; Scanline repeat count
!BYTE 21,128+23,20
!BYTE 0,1 ; Scanline repeat count
!BYTE 22,128+21,21
!BYTE 0,1 ; Scanline repeat count
!BYTE 23,128+19,22
!BYTE 0,1 ; Scanline repeat count
!BYTE 24,128+17,23
!BYTE 0,9 ; Scanline repeat count
!BYTE 25,128+15,24
!BYTE 0,4 ; Scanline repeat count
!BYTE 128+4,21,128+15,21,128+3
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+5,20,128+15,20,128+4
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+6,19,128+15,19,128+5
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+7,19,128+13,19,128+6
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+8,19,128+11,19,128+7
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+23,4,128+11,4,128+22
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+24,3,128+11,3,128+23
!BYTE 0,11 ; Scanline repeat count
!BYTE 128+64
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+24,3,128+11,3,128+23
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+23,4,128+11,4,128+22
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+8,19,128+11,19,128+7
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+7,19,128+13,19,128+6
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+6,19,128+15,19,128+5
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+5,20,128+15,20,128+4
!BYTE 0,4 ; Scanline repeat count
!BYTE 128+4,21,128+15,21,128+3
!BYTE 0,9 ; Scanline repeat count
!BYTE 25,128+15,24
!BYTE 0,1 ; Scanline repeat count
!BYTE 24,128+17,23
!BYTE 0,1 ; Scanline repeat count
!BYTE 23,128+19,22
!BYTE 0,1 ; Scanline repeat count
!BYTE 22,128+21,21
!BYTE 0,1 ; Scanline repeat count
!BYTE 21,128+23,20
!BYTE 0,3 ; Scanline repeat count
!BYTE 16,128+32,16
!BYTE 0,0 ; End of compressed map

15
drag.asm Executable file
View File

@ -0,0 +1,15 @@
!BYTE 0,20 ; Scanline repeat count
!BYTE 128+64
!BYTE 0,9 ; Scanline repeat count
!BYTE 45,128+19
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+64
!BYTE 0,1 ; Scanline repeat count
!BYTE 1,128+3,5,128+3,5,128+3,5,128+3,5,128+3,5,128+3,20
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+64
!BYTE 0,9 ; Scanline repeat count
!BYTE 45,128+19
!BYTE 0,19 ; Scanline repeat count
!BYTE 128+64
!BYTE 0,0 ; End of compressed map

815
drawview.asm Executable file
View File

@ -0,0 +1,815 @@
;*
;* Draw player viewport
;*
DRAWVIEW
STA VIEWPORT
;*
;* Render ground from bottom -> up
;*
DRAWGRND LDA ANGLE ; Calc S,T,DS,DT table address
AND #$7F ; ST table offset = angle * horizon * 8
LSR ; horizon * 8 = 16 * 8 = 128
TAX ; angle * 128 = angle << 7 == (angle<<8) >> 1
LDA #$00 ;
STA SCANLN ; for later...
ROR
; CLC ; Carry = 0 from above
ADC #<ST_TBL ; Add ST table address to offset
STA STPTRL
TXA
ADC #>ST_TBL
STA STPTRH
;*
;* Draw even and odd scanlines together
;*
DRAWGRNDSCN
LDA VIEWPORT ; Max scanline number/2
SEC
SBC SCANLN
TAX
LDA TXT_TBLL,X
STA GBASL
LDA TXT_TBLH,X
ORA GPAGE
STA GBASH
;*
;* Draw right half of odd scanline
;*
LDY #$00 ; Copy and update working values from ST table
STY S_MIDFL ; Convert ST_TBL from 6.10 fixpt to 8.16 fixpt and add XYVIEW
STY T_MIDFL
LDA (STPTR),Y
STA S_MIDFH
INY
LDA (STPTR),Y
CMP #$80
ROR
ROR S_MIDFH
ROR S_MIDFL
CMP #$80
ROR
ROR S_MIDFH
ROR S_MIDFL
STA S_MIDI
LDA S_MIDFH
CLC
ADC XVIEWF
STA S_MIDFH
LDA S_MIDI
ADC XVIEWI
STA S_MIDI
INY
LDA (STPTR),Y
STA T_MIDFH
INY
LDA (STPTR),Y
CMP #$80
ROR
ROR T_MIDFH
ROR T_MIDFL
CMP #$80
ROR
ROR T_MIDFH
ROR T_MIDFL
STA T_MIDI
LDA T_MIDFH
CLC
ADC YVIEWF
STA T_MIDFH
LDA T_MIDI
ADC YVIEWI
STA T_MIDI
INY
LDA (STPTR),Y
STA DS_FRACL
LDX #$00
INY
LDA (STPTR),Y
CMP #$80
BCC +
DEX
+ STA DS_FRACH
STX DS_INT
ROR ; S = S_MID + DS/2
STA S_FRACH
LDA DS_FRACL
ROR
CLC
ADC S_MIDFL
STA S_FRACL
LDA S_FRACH
ADC S_MIDFH
STA S_FRACH
TXA
ADC S_MIDI
STA S_INT
INY
LDA (STPTR),Y
STA DT_FRACL
LDX #$00
INY
LDA (STPTR),Y
CMP #$80
BCC +
DEX
+ STA DT_FRACH
STX DT_INT
ROR ; T = T_MID + DT/2
STA T_FRACH
LDA DT_FRACL
ROR
CLC
ADC T_MIDFL
STA T_FRACL
LDA T_FRACH
ADC T_MIDFH
STA T_FRACH
TXA
ADC T_MIDI
STA T_INT
TYA ; Update STPTR to next scanline
SEC
ADC STPTRL
STA STPTRL
BCC +
INC STPTRH
+ LDY #15 ; Right-middle of screen
BNE GRNDRO
- LDA #$00
BEQ +
GRNDRO LDA S_INT
CMP #$40
BCS -
LDX T_INT
CPX #$40
BCS -
ORA MAP_TBLL,X
STA RDTEXRO+1
LDA MAP_TBLH,X
STA RDTEXRO+2
RDTEXRO LDA MAP
AND #$F0
+ STA (GBASE),Y
LDA S_FRACL ; S = S + DS
CLC
ADC DS_FRACL
STA S_FRACL
LDA S_FRACH
ADC DS_FRACH
STA S_FRACH
LDA S_INT
ADC DS_INT
STA S_INT
LDA T_FRACL ; T = T + DT
CLC
ADC DT_FRACL
STA T_FRACL
LDA T_FRACH
ADC DT_FRACH
STA T_FRACH
LDA T_INT
ADC DT_INT
STA T_INT
INY
CPY #30
BNE GRNDRO
;*
;* Draw left half of odd scanline
;*
LDA DS_FRACL
STA TMP
LDA DS_FRACH
CMP #$80
ROR ; S = S_MID - DS/2
STA TMP+1
ROR TMP
LDA S_MIDFL
SEC
SBC TMP
STA S_FRACL
LDA S_MIDFH
SBC TMP+1
STA S_FRACH
LDA S_MIDI
SBC DS_INT
STA S_INT
LDA DT_FRACL
STA TMP
LDA DT_FRACH
CMP #$80
ROR ; T = T_MID - DT/2
STA TMP+1
ROR TMP
LDA T_MIDFL
SEC
SBC TMP
STA T_FRACL
LDA T_MIDFH
SBC TMP+1
STA T_FRACH
LDA T_MIDI
SBC DT_INT
STA T_INT
LDY #14 ; Left-middle of screen
BNE GRNDLO
- LDA #$00
BEQ +
GRNDLO LDA S_INT
CMP #$40
BCS -
LDX T_INT
CPX #$40
BCS -
ORA MAP_TBLL,X
STA RDTEXLO+1
LDA MAP_TBLH,X
STA RDTEXLO+2
RDTEXLO LDA MAP
AND #$F0
+ STA (GBASE),Y
LDA S_FRACL ; S = S + DS
SEC
SBC DS_FRACL
STA S_FRACL
LDA S_FRACH
SBC DS_FRACH
STA S_FRACH
LDA S_INT
SBC DS_INT
STA S_INT
LDA T_FRACL ; T = T + DT
SEC
SBC DT_FRACL
STA T_FRACL
LDA T_FRACH
SBC DT_FRACH
STA T_FRACH
LDA T_INT
SBC DT_INT
STA T_INT
DEY
BPL GRNDLO
;*
;* Draw right half of even scanline
;*
DEC VDLY
BNE +
BIT SPEAKER
LDA VTONE
STA VDLY
+ LDY #$00 ; Copy and update working values from ST table
STY S_MIDFL ; Convert ST_TBL from 6.10 fixpt to 8.16 fixpt and add XYVIEW
STY T_MIDFL
LDA (STPTR),Y
STA S_MIDFH
INY
LDA (STPTR),Y
CMP #$80
ROR
ROR S_MIDFH
ROR S_MIDFL
CMP #$80
ROR
ROR S_MIDFH
ROR S_MIDFL
STA S_MIDI
LDA S_MIDFH
CLC
ADC XVIEWF
STA S_MIDFH
LDA S_MIDI
ADC XVIEWI
STA S_MIDI
INY
LDA (STPTR),Y
STA T_MIDFH
INY
LDA (STPTR),Y
CMP #$80
ROR
ROR T_MIDFH
ROR T_MIDFL
CMP #$80
ROR
ROR T_MIDFH
ROR T_MIDFL
STA T_MIDI
LDA T_MIDFH
CLC
ADC YVIEWF
STA T_MIDFH
LDA T_MIDI
ADC YVIEWI
STA T_MIDI
INY
LDA (STPTR),Y
STA DS_FRACL
LDX #$00
INY
LDA (STPTR),Y
CMP #$80
BCC +
DEX
+ STA DS_FRACH
STX DS_INT
ROR ; S = S_MID + DS/2
STA S_FRACH
LDA DS_FRACL
ROR
CLC
ADC S_MIDFL
STA S_FRACL
LDA S_FRACH
ADC S_MIDFH
STA S_FRACH
TXA
ADC S_MIDI
STA S_INT
INY
LDA (STPTR),Y
STA DT_FRACL
LDX #$00
INY
LDA (STPTR),Y
CMP #$80
BCC +
DEX
+ STA DT_FRACH
STX DT_INT
ROR ; T = T_MID + DT/2
STA T_FRACH
LDA DT_FRACL
ROR
CLC
ADC T_MIDFL
STA T_FRACL
LDA T_FRACH
ADC T_MIDFH
STA T_FRACH
TXA
ADC T_MIDI
STA T_INT
TYA ; Update STPTR to next scanline
SEC
ADC STPTRL
STA STPTRL
BCC +
INC STPTRH
+ LDY #15 ; Right-middle of screen
BNE GRNDRE
- LDA #$00
BEQ +
GRNDRE LDA S_INT
CMP #$40
BCS -
LDX T_INT
CPX #$40
BCS -
ORA MAP_TBLL,X
STA RDTEXRE+1
LDA MAP_TBLH,X
STA RDTEXRE+2
RDTEXRE LDA MAP
AND #$0F
+ ORA (GBASE),Y
STA (GBASE),Y
LDA S_FRACL ; S = S + DS
CLC
ADC DS_FRACL
STA S_FRACL
LDA S_FRACH
ADC DS_FRACH
STA S_FRACH
LDA S_INT
ADC DS_INT
STA S_INT
LDA T_FRACL ; T = T + DT
CLC
ADC DT_FRACL
STA T_FRACL
LDA T_FRACH
ADC DT_FRACH
STA T_FRACH
LDA T_INT
ADC DT_INT
STA T_INT
INY
CPY #30
BNE GRNDRE
;*
;* Draw left half of even scanline
;*
LDA DS_FRACL
STA TMP
LDA DS_FRACH
CMP #$80
ROR ; S = S_MID - DS/2
STA TMP+1
ROR TMP
LDA S_MIDFL
SEC
SBC TMP
STA S_FRACL
LDA S_MIDFH
SBC TMP+1
STA S_FRACH
LDA S_MIDI
SBC DS_INT
STA S_INT
LDA DT_FRACL
STA TMP
LDA DT_FRACH
CMP #$80
ROR ; T = T_MID - DT/2
STA TMP+1
ROR TMP
LDA T_MIDFL
SEC
SBC TMP
STA T_FRACL
LDA T_MIDFH
SBC TMP+1
STA T_FRACH
LDA T_MIDI
SBC DT_INT
STA T_INT
LDY #14 ; Left-middle of screen
BNE GRNDLE
- LDA #$00
BEQ +
GRNDLE LDA S_INT
CMP #$40
BCS -
LDX T_INT
CPX #$40
BCS -
ORA MAP_TBLL,X
STA RDTEXLE+1
LDA MAP_TBLH,X
STA RDTEXLE+2
RDTEXLE LDA MAP
AND #$0F
+ ORA (GBASE),Y
STA (GBASE),Y
LDA S_FRACL ; S = S + DS
SEC
SBC DS_FRACL
STA S_FRACL
LDA S_FRACH
SBC DS_FRACH
STA S_FRACH
LDA S_INT
SBC DS_INT
STA S_INT
LDA T_FRACL ; T = T + DT
SEC
SBC DT_FRACL
STA T_FRACL
LDA T_FRACH
SBC DT_FRACH
STA T_FRACH
LDA T_INT
SBC DT_INT
STA T_INT
DEY
BPL GRNDLE
DEC VDLY
BNE +
BIT SPEAKER
LDA VTONE
STA VDLY
+ INC SCANLN ; Move on to next even/odd scanlines
LDY SCANLN
CPY #HORIZON/2
BEQ DRAWBACK
JMP DRAWGRNDSCN
;*
;* Draw background
;*
DRAWBACK LDA VIEWPORT ; Max scanline number/2
SEC
SBC SCANLN
TAY
LDA TXT_TBLL,Y
STA STBCK1+1
LDA TXT_TBLH,Y
ORA GPAGE
STA STBCK1+2
LDA TXT_TBLL-1,Y
STA STBCK2+1
LDA TXT_TBLH-1,Y
ORA GPAGE
STA STBCK2+2
LDY #29
LDA ANGLE
CLC
ADC #15
- AND #$7F
TAX
LDA WALLS,X
STBCK1 STA $0400,Y
AND #$F0
STBCK2 STA $0400,Y
DEX
TXA
DEY
BPL -
;*
;* Draw top-down map view
;*
DRAWMAP LDA VIEWPORT
TAY
STY SCANLN
SEC
SBC #9 ; 20 - 2
STA VIEWPORT
DRAWMAPSCN
LDA TXT_TBLL,Y
STA STMAP+1
LDA TXT_TBLH,Y
ORA GPAGE
STA STMAP+2
LDX #$80
TYA
CLC
ADC YVIEWI
SEC
SBC #$05
; SEC
SBC VIEWPORT
CMP #$40
BCS + ; Scanline is off the map, so force black coordinates
TAX
LDA MAP_TBLL,X
STA LDMAP+1
LDA MAP_TBLH,X
STA LDMAP+2
LDA XVIEWI
SEC
SBC #$04
TAX
+ LDY #31
- CPX #$40
BCC LDMAP
LDA #$00
BEQ STMAP
LDMAP LDA MAP,X
STMAP STA $0400,Y
INX
INY
CPY #40
BNE -
DEC MDLY
BNE +
BIT SPEAKER
LDA MTONE
STA MDLY
+ DEC SCANLN
LDY SCANLN
CPY VIEWPORT
BNE DRAWMAPSCN
LDA P1XI ; Plot player 1 on map
SEC
SBC XVIEWI
CLC
ADC #$04
BMI +
CMP #9
BCS +
ADC #31
TAY
LDA P1YI
SEC
SBC YVIEWI
CLC
ADC #$04
BMI +
CMP #9
BCS +
SEC
ADC VIEWPORT
TAX
LDA TXT_TBLL,X
STA TMP
LDA TXT_TBLH,X
ORA GPAGE
STA TMP+1
LDA P1CYCLE
STA (TMP),Y
+ LDA P2XI ; Plot player 2 on map
SEC
SBC XVIEWI
CLC
ADC #$04
BMI +
CMP #9
BCS +
ADC #31
TAY
LDA P2YI
SEC
SBC YVIEWI
CLC
ADC #$04
BMI +
CMP #9
BCS +
SEC
ADC VIEWPORT
TAX
LDA TXT_TBLL,X
STA TMP
LDA TXT_TBLH,X
ORA GPAGE
STA TMP+1
LDA P2CYCLE
STA (TMP),Y
+ RTS
;*
;* Draw enemy light cycle
;*
DRAWENEMY
ASL
STA EBTTM
INC EBTTM
INC EBTTM
; SEC
SBC #HORIZON-1
STA VIEWPORT
LDA #$00
STA SCANLN
TXA
ASL
STA TMP
CMP #$80
ROR
CMP #$80
ROR
CLC
ADC TMP
STA TMP
LDA #15
SEC
SBC TMP
CMP #30
BCS ++
STA ECNTR
LDA PPSIZE
CMP #$01
BNE +
LDY VIEWPORT ; Only one pixel to plot
INY
LDX ECNTR
JMP GPLOT
+ LDA SCANLN
- CLC
ADC VIEWPORT
TAY
LDA ECNTR
SEC
SBC SCANLN
BPL +
LDA #$00
+ TAX
LDA ECNTR
CLC
ADC SCANLN
CMP #30
BCC +
LDA #29
+ JSR GHLIN
INC SCANLN
LDA SCANLN
CMP PPSIZE
BCC -
ASL
; CLC
ADC VIEWPORT
STA VIEWPORT
- SEC
SBC SCANLN
CMP EBTTM
BCS ++
TAY
LDA ECNTR
SEC
SBC SCANLN
BPL +
LDA #$00
+ TAX
LDA ECNTR
CLC
ADC SCANLN
CMP #30
BCC +
LDA #29
+ JSR GHLIN
LDA VIEWPORT
DEC SCANLN
BPL -
++ RTS
ECNTR !BYTE $00
EBTTM !BYTE $00
;*
;* Draw boost amount
;*
UPDTBST LSR
LSR
LSR
LSR
STA TMP
JSR GOTOXY
JSR NORMAL
LDX #$0F
EMPTYBST CPX TMP
BEQ +
LDA #' '
JSR PUTC
DEX
BPL EMPTYBST
BMI ++
+ CPX #$00
BEQ ++
JSR INVERSE
FULLBST LDA #'='
JSR PUTC
DEX
BNE FULLBST
++ JSR INVERSE
RTS
;*
;* Draw paddle position
;*
UPDTPDL TYA
LSR
LSR
LSR
CMP GCPREVY
BEQ ++
STX TMP
PHA
LDX #0
LDY #22
JSR GOTOXY
LDA GCPREVY
CMP #14
BCC +
LDA #14
+ CLC
ADC #3
TAY
LDA (TBAS1),Y
AND #$7F
STA (TBAS1),Y
STA (TBAS2),Y
PLA
STA GCPREVY
CMP #14
BCC +
LDA #14
+ CLC
ADC #3
TAY
LDA (TBAS1),Y
ORA #$80
STA (TBAS1),Y
STA (TBAS2),Y
LDX TMP
++ TXA
LSR
LSR
LSR
CMP GCPREVX
BEQ ++
PHA
LDX #0
LDY #22
JSR GOTOXY
LDA GCPREVX
CMP #14
BCC +
LDA #14
+ CLC
ADC #22
TAY
LDA (TBAS1),Y
AND #$7F
STA (TBAS1),Y
STA (TBAS2),Y
PLA
STA GCPREVX
CMP #14
BCC +
LDA #14
+ CLC
ADC #22
TAY
LDA (TBAS1),Y
ORA #$80
STA (TBAS1),Y
STA (TBAS2),Y
++ LDY GCPREVY
LDX GCPREVX
RTS
GCPREVX !BYTE $00
GCPREVY !BYTE $00

71
hole.asm Executable file
View File

@ -0,0 +1,71 @@
!BYTE 0,4 ; Scanline repeat count
!BYTE 128+64
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+28,7,128+1,1,128+27
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+24,16,128+24
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+21,22,128+21
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+19,26,128+19
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+17,30,128+17
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+16,32,128+16
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+14,36,128+14
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+13,38,128+13
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+12,40,128+12
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+11,42,128+11
!BYTE 0,2 ; Scanline repeat count
!BYTE 128+10,44,128+10
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+9,46,128+9
!BYTE 0,2 ; Scanline repeat count
!BYTE 128+8,48,128+8
!BYTE 0,2 ; Scanline repeat count
!BYTE 128+7,50,128+7
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+6,52,128+6
!BYTE 0,4 ; Scanline repeat count
!BYTE 128+5,54,128+5
!BYTE 0,8 ; Scanline repeat count
!BYTE 128+4,56,128+4
!BYTE 0,4 ; Scanline repeat count
!BYTE 128+5,54,128+5
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+6,52,128+6
!BYTE 0,2 ; Scanline repeat count
!BYTE 128+7,50,128+7
!BYTE 0,2 ; Scanline repeat count
!BYTE 128+8,48,128+8
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+9,46,128+9
!BYTE 0,2 ; Scanline repeat count
!BYTE 128+10,44,128+10
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+11,42,128+11
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+12,40,128+12
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+13,38,128+13
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+14,36,128+14
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+16,32,128+16
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+17,30,128+17
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+19,26,128+19
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+21,22,128+21
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+24,16,128+24
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+28,7,128+1,1,128+27
!BYTE 0,4 ; Scanline repeat count
!BYTE 128+64
!BYTE 0,0 ; End of compressed map

909
intro.asm Executable file
View File

@ -0,0 +1,909 @@
LDA #$91 ; CTRL-Q = TURN OFF 80 COLUMN
JSR $FDED ; COUT
STA $C000 ; Turn off 80STORE
STA $C00E ; Primary charset
CLI ; Turn off interrupts
LDA #<ARENAS
STA ARENAP
LDA #>ARENAS
STA ARENAP+1
;*
;* Check for connected paddles
;*
JSR GCREAD
LDA #$01
CPX #GCMAX
BNE +
CPY #GCMAX
BNE +
LDA #$00
+ STA USEPDLS
;*
;* Initialize game state and get player options
;*
INITGAME
LDA $C054 ; Display page 1
JSR $FB39 ; TXT mode
JSR NORMAL
JSR $FC58 ; HOME
LDA #$10
STA GCPREVX
STA GCPREVY
;*
;* Init player panel
;*
JSR INVERSE
LDX #0
LDY #20
JSR PUTSXY
!TEXT "/:::: PLAYER 1 ::::\/:::: PLAYER 2 ::::\", 0
LDX #0
LDY #21
JSR PUTSXY
!TEXT "! [===============]!![===============] !", 0
LDX #0
LDY #22
JSR PUTSXY
!TEXT "! <<<<<<<*>>>>>>> !! <<<<<<<*>>>>>>> !", 0
LDX #0
LDY #23
JSR PUTSXY
!TEXT "\::::::::::::::::::/\::::::::::::::::::/", 0
;*
;* Display initial setting screen
;*
SHOWOPT JSR NORMAL
LDX #12
LDY #0
JSR PUTSXY
!TEXT "BY: RESMAN", 0
LDX #10
LDY #1
JSR PUTSXY
!TEXT "COPYRIGHT 1977", 0
LDX #4
LDY #19
JSR PUTSXY
!TEXT "(WHY 1977 WON'T BE LIKE 1977)", 0
LDX #10
LDY #4
JSR GOTOXY
JSR INVERSE
LDA #'P'
JSR PUTC
JSR NORMAL
JSR PUTS
!TEXT "ADDLES: ", 0
LDA USEPDLS
BEQ +
JSR PUTS
!TEXT "ENABLE ", 0
JMP ++
+ JSR PUTS
!TEXT "DISABLE", 0
++ LDX #10
LDY #7
JSR GOTOXY
JSR INVERSE
LDA #'A'
JSR PUTC
JSR NORMAL
JSR PUTS
!TEXT "RENA: ", 0
LDA ARENAP
STA TMP
LDA ARENAP+1
STA TMP+1
LDY #$00
- TYA
PHA
LDA (TMP),Y
JSR PUTC
PLA
TAY
INY
CPY #$10
BNE -
LDX #10
LDY #10
JSR PUTSXY
!TEXT "PLAYER ", 0
JSR INVERSE
LDA #'1'
JSR PUTC
JSR NORMAL
LDA P1MAN
BEQ +
JSR PUTS
!TEXT ": HUMAN ", 0
JMP ++
+ JSR PUTS
!TEXT ": COMPUTER", 0
++ LDX #10
LDY #11
JSR PUTSXY
!TEXT "PLAYER ", 0
JSR INVERSE
LDA #'2'
JSR PUTC
JSR NORMAL
LDA P2MAN
BEQ +
JSR PUTS
!TEXT ": HUMAN ", 0
JMP ++
+ JSR PUTS
!TEXT ": COMPUTER", 0
++ LDX #10
LDY #14
JSR PUTSXY
!TEXT "START GAME:", 0
LDX #15
LDY #15
JSR GOTOXY
JSR INVERSE
LDA #'S'
JSR PUTC
JSR NORMAL
JSR PUTS
!TEXT "HORT TRAIL", 0
LDX #15
LDY #16
JSR GOTOXY
JSR INVERSE
LDA #'M'
JSR PUTC
JSR NORMAL
JSR PUTS
!TEXT "EDIUM TRAIL", 0
LDX #15
LDY #17
JSR GOTOXY
JSR INVERSE
LDA #'L'
JSR PUTC
JSR NORMAL
JSR PUTS
!TEXT "ONG TRAIL", 0
;*
;* Scan for option input
;*
OPTION LDA KEYBD
BMI +
JMP OPTPDLS
+ BIT KEYSTRB
CMP #$D0 ; P key
BNE +
LDA USEPDLS
EOR #$01
STA USEPDLS
JMP SHOWOPT
+ CMP #$C1 ; A key
BNE ++
; Move to next arena
LDA ARENAP
STA TMP
LDA ARENAP+1
STA TMP+1
LDY #$1A ; Scan for end of compressed map
- LDA (TMP),Y
BEQ +
INY
BNE -
+ INY
TYA
CLC
ADC TMP
STA TMP
LDA #$00
ADC TMP+1
STA TMP+1
LDY #$00
LDA (TMP),Y
BNE -
INY
LDA (TMP),Y ; Check for end of arena == 0
BNE +
LDA #<ARENAS ; Wrap around to beginning
STA ARENAP
LDA #>ARENAS
STA ARENAP+1
JMP SHOWOPT
+ TYA
CLC
ADC TMP
STA ARENAP
LDA #$00
ADC TMP+1
STA ARENAP+1
JMP SHOWOPT
++ CMP #$B1 ; 1 KEY
BNE +
LDA P1MAN
EOR #$01
STA P1MAN
JMP SHOWOPT
+ CMP #$B2 ; 2 KEY
BNE +
LDA P2MAN
EOR #$01
STA P2MAN
JMP SHOWOPT
+ CMP #$D3 ; S key
BNE +
LDA #$0F
STA LENTAIL
BNE STARTGAME
+ CMP #$CD ; M key
BNE +
LDA #$7F
STA LENTAIL
BNE STARTGAME
+ CMP #$CC ; L key
BNE +
LDA #$FF
STA LENTAIL
BNE STARTGAME
+ CMP #$9B ; ESC key
BNE OPTPDLS
JMP EXIT
OPTPDLS LDA USEPDLS
BEQ +
JSR GCREAD
JSR UPDTPDL
+ JMP OPTION
STARTGAME
;*
;* Init arena map
;*
LDA #>MAP
STA STPTRH
LDY #<MAP ; Better be $00
STY STPTRL
INITMAP LDA #DRKBLU ; Fill even row
STA (STPTR),Y
INY
LDA #GREY
STA (STPTR),Y
INY
CPY #$40
BCC INITMAP
- LDA #GREY ; Fill odd row
STA (STPTR),Y
INY
LDA #DRKBLU
STA (STPTR),Y
INY
BPL -
- LDA #DRKBLU ; Fill even row
STA (STPTR),Y
INY
LDA #GREY
STA (STPTR),Y
INY
CPY #$C0
BCC -
- LDA #GREY ; Fill odd row
STA (STPTR),Y
INY
LDA #DRKBLU
STA (STPTR),Y
INY
BNE -
INC STPTRH
LDA STPTRH
CMP #>(MAP+$1000)
BNE INITMAP
;*
;* Get arena initial start positions
;*
LDA ARENAP
STA TMP
LDA ARENAP+1
STA TMP+1
LDY #$10 ; Copy start angle/pos out of arena map
LDA (TMP),Y
STA P1ANGLE
INY
LDA (TMP),Y
STA P1XF
INY
LDA (TMP),Y
STA P1XI
STA P1XPREV
INY
LDA (TMP),Y
STA P1YF
INY
LDA (TMP),Y
STA P1YI
STA P1YPREV
INY
LDA (TMP),Y
STA P2ANGLE
INY
LDA (TMP),Y
STA P2XF
INY
LDA (TMP),Y
STA P2XI
STA P2XPREV
INY
LDA (TMP),Y
STA P2YF
INY
LDA (TMP),Y
STA P2YI
STA P2YPREV
;*
;* Init rest of player variables
;*
LDX #$00 ; Clear out tails
- LDA #$40
STA P1YTAIL,X
STA P2YTAIL,X
LDA #$00
STA P1XTAIL,X
LDA #$7F
STA P2XTAIL,X
DEX
BNE -
STX P1TURBO ; Reset turbo values
STX P2TURBO
LDA #FULLBOOST
STA P1BOOST
STA P2BOOST
;*
;* Start decompressing into map
;*
LDA #>MAP
STA STPTRH
LDA #<MAP
STA STPTRL
DECOMP INY
LDA (TMP),Y
BEQ GETCNT
BRK ; This better not happen
GETCNT INY
LDA (TMP),Y
BNE +
JMP INITGR ; Done decompressing, init graphics mode
+ STA SCANLN
INY
TYA
CLC
ADC TMP
STA TMP
LDA #$00
ADC TMP+1
STA TMP+1
REPSCAN LDY #$00
-- LDA (TMP),Y
BNE +
DEC SCANLN
BNE REPSCAN
BEQ GETCNT
+ BMI +
TAX
TYA
PHA
TXA
TAY
LDA #$00
- DEY
STA (STPTR),Y
BNE -
PLA
TAY
TXA
+ AND #$7F
CLC
ADC STPTRL
STA STPTRL
LDA #$00
ADC STPTRH
STA STPTRH
INY
BNE --
;*
;* Clear screens
;*
INITGR LDA $C053 ; Mix mode
LDA $C056 ; GR mode
LDA $C050
LDA #$08 ; Render to page2
STA GPAGE
LDA #BLACK
STA GCLR
LDY #0
LDX #0
LDA #39
STA SCANLN
LDA #39
JSR GRECT
LDA #$04 ; Render to page 1
STA GPAGE
LDA #BLACK
STA GCLR
LDY #0
LDX #0
LDA #39
STA SCANLN
LDA #39
JSR GRECT
LDA #$01 ; Set current page to 1
STA CURPAGE
JSR GAMELOOP
;*
;* Return to caller
;*
PHA
AND #$01 ; Player 1 DeRez?
BEQ +
LDA #MAGENTA
STA GCLR
LDY #0
LDX #0
LDA #19
STA SCANLN
LDA #39
JSR GRECT
+ PLA
AND #$02 ; Player 2 DeRez?
BEQ +
LDA #MAGENTA
STA GCLR
LDY #20
LDX #0
LDA #39
STA SCANLN
LDA #39
JSR GRECT
+ LDX #$20
- LDA $C055 ; Display page 2
BIT SPEAKER
LDA #$7F
JSR $FCA8 ; WAIT
LDA $C054 ; Display page 1
BIT SPEAKER
LDA #$7F
JSR $FCA8 ; WAIT
DEX
BNE -
JSR $FB39 ; TXT mode
JSR $FC58 ; HOME
BIT KEYSTRB
LDX #10
LDY #12
JSR GOTOXY
LDA PSTATUS
CMP #$03
BEQ +
JSR PUTS
!TEXT "PLAYER ", 0
LDA PSTATUS
EOR #$03
JSR PUTA
JSR PUTS
!TEXT " WINS!", 0
JMP ++
+ JSR PUTS
!TEXT " DRAW !!!", 0
++ LDX #$10
- LDA #$FF
JSR $FCA8 ; WAIT
DEX
BNE -
JMP INITGAME
EXIT JSR NORMAL
LDA $BF00
CMP #$4C
BNE + ; No ProDOS
SEI ; Turn interrupts on
JSR $BF00 ; ProDOS QUIT
!BYTE $65
!WORD PARMTBL
PARMTBL !BYTE 4
!BYTE 0
!WORD 0
!BYTE 0
!WORD 0
+ JMP ($FFFC) ; Reset vector
ARENAS !TEXT "BASIC "
!BYTE $00 ; P1 ANGLE
!WORD $0080 ; P1 X 0.5
!WORD $2080 ; P1 Y 32.5
!BYTE $40 ; P2 ANGLE
!WORD $3F80 ; P2 X 63.5
!WORD $2080 ; P2 Y 32.5
; Start of compressed map
!BYTE 0,64 ; Scanline repeat count (1..64)
!BYTE 128+64 ; Set 64 tiles
!BYTE 0,0 ; End of compressed map
!TEXT "DRAG RACE "
!BYTE $00 ; P1 ANGLE
!WORD $0080 ; P1 X 0.5
!WORD $1E80 ; P1 Y 30.5
!BYTE $00 ; P2 ANGLE
!WORD $0080 ; P2 X 0.5
!WORD $2280 ; P2 Y 34.5
; Start of compressed map
!BYTE 0,20 ; Scanline repeat count
!BYTE 128+64
!BYTE 0,9 ; Scanline repeat count
!BYTE 45,128+19
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+64
!BYTE 0,1 ; Scanline repeat count
!BYTE 1,128+3,5,128+3,5,128+3,5,128+3,5,128+3,5,128+3,20
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+64
!BYTE 0,9 ; Scanline repeat count
!BYTE 45,128+19
!BYTE 0,19 ; Scanline repeat count
!BYTE 128+64
!BYTE 0,0 ; End of compressed map
!TEXT "BLACK HOLE "
!BYTE $00 ; P1 ANGLE
!WORD $0080 ; P1 X 0.5
!WORD $2080 ; P1 Y 32.5
!BYTE $40 ; P2 ANGLE
!WORD $3F80 ; P2 X 63.5
!WORD $2080 ; P2 Y 32.5
; Start of compressed map
!BYTE 0,4 ; Scanline repeat count
!BYTE 128+64
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+28,7,128+1,1,128+27
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+24,16,128+24
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+21,22,128+21
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+19,26,128+19
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+17,30,128+17
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+16,32,128+16
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+14,36,128+14
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+13,38,128+13
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+12,40,128+12
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+11,42,128+11
!BYTE 0,2 ; Scanline repeat count
!BYTE 128+10,44,128+10
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+9,46,128+9
!BYTE 0,2 ; Scanline repeat count
!BYTE 128+8,48,128+8
!BYTE 0,2 ; Scanline repeat count
!BYTE 128+7,50,128+7
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+6,52,128+6
!BYTE 0,4 ; Scanline repeat count
!BYTE 128+5,54,128+5
!BYTE 0,8 ; Scanline repeat count
!BYTE 128+4,56,128+4
!BYTE 0,4 ; Scanline repeat count
!BYTE 128+5,54,128+5
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+6,52,128+6
!BYTE 0,2 ; Scanline repeat count
!BYTE 128+7,50,128+7
!BYTE 0,2 ; Scanline repeat count
!BYTE 128+8,48,128+8
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+9,46,128+9
!BYTE 0,2 ; Scanline repeat count
!BYTE 128+10,44,128+10
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+11,42,128+11
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+12,40,128+12
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+13,38,128+13
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+14,36,128+14
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+16,32,128+16
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+17,30,128+17
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+19,26,128+19
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+21,22,128+21
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+24,16,128+24
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+28,7,128+1,1,128+27
!BYTE 0,4 ; Scanline repeat count
!BYTE 128+64
!BYTE 0,0 ; End of compressed map
!TEXT "IRON CROSS "
!BYTE $00 ; P1 ANGLE
!WORD $0080 ; P1 X 0.5
!WORD $2080 ; P1 Y 32.5
!BYTE $40 ; P2 ANGLE
!WORD $3F80 ; P2 X 63.5
!WORD $2080 ; P2 Y 32.5
; Start of compressed map
!BYTE 0,4 ; Scanline repeat count
!BYTE 17,128+31,16
!BYTE 0,1 ; Scanline repeat count
!BYTE 21,128+23,20
!BYTE 0,1 ; Scanline repeat count
!BYTE 22,128+21,21
!BYTE 0,1 ; Scanline repeat count
!BYTE 23,128+19,22
!BYTE 0,1 ; Scanline repeat count
!BYTE 24,128+17,23
!BYTE 0,9 ; Scanline repeat count
!BYTE 25,128+15,24
!BYTE 0,4 ; Scanline repeat count
!BYTE 128+4,21,128+15,21,128+3
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+5,20,128+15,20,128+4
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+6,19,128+15,19,128+5
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+7,19,128+13,19,128+6
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+8,19,128+11,19,128+7
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+23,4,128+11,4,128+22
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+24,3,128+11,3,128+23
!BYTE 0,11 ; Scanline repeat count
!BYTE 128+64
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+24,3,128+11,3,128+23
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+23,4,128+11,4,128+22
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+8,19,128+11,19,128+7
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+7,19,128+13,19,128+6
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+6,19,128+15,19,128+5
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+5,20,128+15,20,128+4
!BYTE 0,4 ; Scanline repeat count
!BYTE 128+4,21,128+15,21,128+3
!BYTE 0,9 ; Scanline repeat count
!BYTE 25,128+15,24
!BYTE 0,1 ; Scanline repeat count
!BYTE 24,128+17,23
!BYTE 0,1 ; Scanline repeat count
!BYTE 23,128+19,22
!BYTE 0,1 ; Scanline repeat count
!BYTE 22,128+21,21
!BYTE 0,1 ; Scanline repeat count
!BYTE 21,128+23,20
!BYTE 0,3 ; Scanline repeat count
!BYTE 16,128+32,16
!BYTE 0,0 ; End of compressed map
!TEXT "GRID "
!BYTE $00 ; P1 ANGLE
!WORD $0080 ; P1 X 0.5
!WORD $2080 ; P1 Y 32.5
!BYTE $40 ; P2 ANGLE
!WORD $3F80 ; P2 X 63.5
!WORD $2080 ; P2 Y 32.5
; Start of compressed map
!BYTE 0,8 ; Scanline repeat count (1..64)
!BYTE 128+64 ; Set 64 tiles
!BYTE 128+64 ; Set 64 tiles
!BYTE 128+2,4,128+4,4,128+4,4,128+4,4,128+4,4,128+4,4,128+4,4,128+4,4,128+2
!BYTE 128+2,4,128+4,4,128+4,4,128+4,4,128+4,4,128+4,4,128+4,4,128+4,4,128+2
!BYTE 128+2,4,128+4,4,128+4,4,128+4,4,128+4,4,128+4,4,128+4,4,128+4,4,128+2
!BYTE 128+2,4,128+4,4,128+4,4,128+4,4,128+4,4,128+4,4,128+4,4,128+4,4,128+2
!BYTE 128+64 ; Set 64 tiles
!BYTE 128+64 ; Set 64 tiles
!BYTE 0,0 ; End of compressed map
!TEXT "RINGS "
!BYTE $00 ; P1 ANGLE
!WORD $0080 ; P1 X 0.5
!WORD $2080 ; P1 Y 32.5
!BYTE $40 ; P2 ANGLE
!WORD $3F80 ; P2 X 63.5
!WORD $2080 ; P2 Y 32.5
; Start of compressed map
!BYTE 0,1 ; Scanline repeat count
!BYTE 25,128+14,25
!BYTE 0,1 ; Scanline repeat count
!BYTE 22,128+20,22
!BYTE 0,1 ; Scanline repeat count
!BYTE 19,128+26,19
!BYTE 0,1 ; Scanline repeat count
!BYTE 17,128+30,17
!BYTE 0,1 ; Scanline repeat count
!BYTE 15,128+34,15
!BYTE 0,1 ; Scanline repeat count
!BYTE 14,128+36,14
!BYTE 0,1 ; Scanline repeat count
!BYTE 12,128+40,12
!BYTE 0,1 ; Scanline repeat count
!BYTE 11,128+42,11
!BYTE 0,1 ; Scanline repeat count
!BYTE 10,128+18,2,128+4,1,128+19,10
!BYTE 0,1 ; Scanline repeat count
!BYTE 9,128+15,6,128+4,6,128+15,9
!BYTE 0,1 ; Scanline repeat count
!BYTE 8,128+14,8,128+4,8,128+14,8
!BYTE 0,1 ; Scanline repeat count
!BYTE 7,128+13,10,128+4,10,128+13,7
!BYTE 0,1 ; Scanline repeat count
!BYTE 6,128+12,12,128+4,12,128+12,6
!BYTE 0,1 ; Scanline repeat count
!BYTE 6,128+11,13,128+4,13,128+11,6
!BYTE 0,1 ; Scanline repeat count
!BYTE 5,128+11,14,128+4,14,128+11,5
!BYTE 0,1 ; Scanline repeat count
!BYTE 4,128+11,15,128+4,15,128+11,4
!BYTE 0,1 ; Scanline repeat count
!BYTE 4,128+10,15,128+6,15,128+10,4
!BYTE 0,1 ; Scanline repeat count
!BYTE 3,128+10,13,128+12,13,128+10,3
!BYTE 0,1 ; Scanline repeat count
!BYTE 3,128+9,12,128+16,12,128+9,3
!BYTE 0,1 ; Scanline repeat count
!BYTE 2,128+10,10,128+20,10,128+10,2
!BYTE 0,1 ; Scanline repeat count
!BYTE 2,128+9,10,128+22,10,128+9,2
!BYTE 0,1 ; Scanline repeat count
!BYTE 2,128+9,9,128+24,9,128+9,2
!BYTE 0,2 ; Scanline repeat count
!BYTE 1,128+9,9,128+26,9,128+9,1
!BYTE 0,1 ; Scanline repeat count
!BYTE 1,128+8,9,128+12,4,128+12,9,128+8,1
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+9,9,128+10,8,128+10,9,128+9
!BYTE 0,2 ; Scanline repeat count
!BYTE 128+9,8,128+9,12,128+9,8,128+9
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+8,9,128+8,14,128+8,9,128+8
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+8,8,128+9,14,128+9,8,128+8
!BYTE 0,4 ; Scanline repeat count
!BYTE 128+8,8,128+8,16,128+8,8,128+8
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+8,8,128+9,14,128+9,8,128+8
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+8,9,128+8,14,128+8,9,128+8
!BYTE 0,2 ; Scanline repeat count
!BYTE 128+9,8,128+9,12,128+9,8,128+9
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+9,9,128+10,8,128+10,9,128+8,1
!BYTE 0,1 ; Scanline repeat count
!BYTE 1,128+8,9,128+12,4,128+12,9,128+8,1
!BYTE 0,2 ; Scanline repeat count
!BYTE 1,128+9,9,128+26,9,128+9,1
!BYTE 0,1 ; Scanline repeat count
!BYTE 2,128+9,9,128+24,9,128+9,2
!BYTE 0,1 ; Scanline repeat count
!BYTE 2,128+9,10,128+22,10,128+9,2
!BYTE 0,1 ; Scanline repeat count
!BYTE 2,128+10,10,128+20,10,128+10,2
!BYTE 0,1 ; Scanline repeat count
!BYTE 3,128+9,12,128+16,12,128+9,3
!BYTE 0,1 ; Scanline repeat count
!BYTE 3,128+10,13,128+12,13,128+10,3
!BYTE 0,1 ; Scanline repeat count
!BYTE 4,128+10,15,128+6,15,128+10,4
!BYTE 0,1 ; Scanline repeat count
!BYTE 4,128+11,15,128+4,15,128+11,4
!BYTE 0,1 ; Scanline repeat count
!BYTE 5,128+11,14,128+4,14,128+11,5
!BYTE 0,1 ; Scanline repeat count
!BYTE 6,128+11,13,128+4,13,128+11,6
!BYTE 0,1 ; Scanline repeat count
!BYTE 6,128+12,12,128+4,12,128+12,6
!BYTE 0,1 ; Scanline repeat count
!BYTE 7,128+13,10,128+4,10,128+13,7
!BYTE 0,1 ; Scanline repeat count
!BYTE 8,128+14,8,128+4,8,128+14,8
!BYTE 0,1 ; Scanline repeat count
!BYTE 9,128+15,6,128+4,6,128+15,9
!BYTE 0,1 ; Scanline repeat count
!BYTE 10,128+17,1,128+1,1,128+4,2,128+18,10
!BYTE 0,1 ; Scanline repeat count
!BYTE 11,128+42,11
!BYTE 0,1 ; Scanline repeat count
!BYTE 12,128+40,12
!BYTE 0,1 ; Scanline repeat count
!BYTE 14,128+36,14
!BYTE 0,1 ; Scanline repeat count
!BYTE 15,128+34,15
!BYTE 0,1 ; Scanline repeat count
!BYTE 17,128+30,17
!BYTE 0,1 ; Scanline repeat count
!BYTE 19,128+26,19
!BYTE 0,1 ; Scanline repeat count
!BYTE 22,128+20,22
!BYTE 0,1 ; Scanline repeat count
!BYTE 26,128+13,25
!BYTE 0,0 ; End of compressed map
!TEXT "MAZE "
!BYTE $00 ; P1 ANGLE
!WORD $0080 ; P1 X 0.5
!WORD $2080 ; P1 Y 32.5
!BYTE $40 ; P2 ANGLE
!WORD $3F80 ; P2 X 63.5
!WORD $2080 ; P2 Y 32.5
; Start of compressed map
!BYTE 0,4 ; Scanline repeat count
!BYTE 128+64
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+4,57,128+3
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+4,1,128+19,1,128+23,1,128+3,1,128+7,1,128+3
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+4,1,128+3,13,128+3,1,128+3,13,128+3,5,128+3,1,128+3,1,128+3,1,128+3
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+4,1,128+3,1,128+15,1,128+19,1,128+3,1,128+3,1,128+3,1,128+3,1,128+3
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+4,1,128+3,1,128+3,9,128+3,1,128+3,9,128+3,1,128+3,1,128+3,1,128+3,1,128+3,1,128+3,1,128+3
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+4,1,128+3,1,128+15,1,128+11,1,128+3,1,128+3,1,128+3,1,128+7,1,128+3,1,128+3
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+4,1,128+3,13,128+3,1,128+3,9,128+3,1,128+3,1,128+3,9,128+3,1,128+3
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+4,1,128+15,1,128+3,1,128+27,1,128+7,1,128+3
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+4,13,128+3,1,128+3,13,128+3,1,128+3,5,128+3,1,128+3,5,128+3
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+20,1,128+19,1,128+15,1,128+7
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+4,13,128+3,17,128+3,1,128+3,9,128+3,1,128+3,1,128+3
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+4,1,128+35,1,128+11,1,128+3,1,128+3,1,128+3
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+4,1,128+3,33,128+3,5,128+3,1,128+3,1,128+3,1,128+3
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+40,1,128+7,1,128+3,1,128+11
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+4,13,128+3,17,128+3,9,128+3,1,128+3,5,128+3
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+20,1,128+7,1,128+11,1,128+7,1,128+3,1,128+3,1,128+7
!BYTE 0,1 ; Scanline repeat count
!BYTE 8,128+4,5,128+3,1,128+3,1,128+3,9,128+3,1,128+7,1,128+3,1,128+3,1,128+3,1,128+3
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+4,1,128+15,1,128+3,1,128+11,1,128+19,1,128+3,1,128+3
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+4,1,128+3,13,128+3,1,128+3,5,128+3,1,128+3,5,128+3,1,128+3,5,128+3,1,128+3
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+4,1,128+15,1,128+3,1,128+7,1,128+3,1,128+7,1,128+3,1,128+11,1,128+3
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+4,1,128+3,1,128+3,5,128+3,1,128+3,9,128+3,1,128+3,1,128+3,1,128+3,1,128+3,9,128+3
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+4,1,128+3,1,128+7,1,128+3,1,128+15,1,128+3,1,128+7,1,128+11,1,128+3
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+4,1,128+3,17,128+3,1,128+3,5,128+3,5,128+3,1,128+3,1,128+3,1,128+3,1,128+3
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+4,1,128+3,1,128+19,1,128+19,1,128+3,1,128+3,1,128+3,1,128+3
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+4,1,128+3,1,128+3,9,128+3,1,128+3,1,128+3,5,128+3,5,128+3,1,128+3,1,128+3,5,128+3
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+24,1,128+3,1,128+7,1,128+3,1,128+7,1,128+3,1,128+11
!BYTE 0,1 ; Scanline repeat count
!BYTE 21,128+3,1,128+3,1,128+3,1,128+3,1,128+3,1,128+3,1,128+3,1,128+3,9,128+3
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+8,1,128+7,1,128+7,1,128+7,1,128+11,1,128+3,1,128+11,1,128+3
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+4,1,128+3,1,128+3,1,128+3,1,128+3,1,128+3,1,128+3,1,128+3,13,128+3,9,128+3,1,128+3
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+4,1,128+7,1,128+7,1,128+3,1,128+3,1,128+27,1,128+7
!BYTE 0,0 ; End of compressed map
!BYTE $00 ; End of arenas
ARENAP !WORD ARENAS

1089
lightcycles.asm Executable file

File diff suppressed because it is too large Load Diff

63
maze.asm Executable file
View File

@ -0,0 +1,63 @@
!BYTE 0,4 ; Scanline repeat count
!BYTE 128+64
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+4,57,128+3
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+4,1,128+19,1,128+23,1,128+3,1,128+7,1,128+3
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+4,1,128+3,13,128+3,1,128+3,13,128+3,5,128+3,1,128+3,1,128+3,1,128+3
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+4,1,128+3,1,128+15,1,128+19,1,128+3,1,128+3,1,128+3,1,128+3,1,128+3
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+4,1,128+3,1,128+3,9,128+3,1,128+3,9,128+3,1,128+3,1,128+3,1,128+3,1,128+3,1,128+3,1,128+3
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+4,1,128+3,1,128+15,1,128+11,1,128+3,1,128+3,1,128+3,1,128+7,1,128+3,1,128+3
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+4,1,128+3,13,128+3,1,128+3,9,128+3,1,128+3,1,128+3,9,128+3,1,128+3
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+4,1,128+15,1,128+3,1,128+27,1,128+7,1,128+3
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+4,13,128+3,1,128+3,13,128+3,1,128+3,5,128+3,1,128+3,5,128+3
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+20,1,128+19,1,128+15,1,128+7
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+4,13,128+3,17,128+3,1,128+3,9,128+3,1,128+3,1,128+3
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+4,1,128+35,1,128+11,1,128+3,1,128+3,1,128+3
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+4,1,128+3,33,128+3,5,128+3,1,128+3,1,128+3,1,128+3
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+40,1,128+7,1,128+3,1,128+11
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+4,13,128+3,17,128+3,9,128+3,1,128+3,5,128+3
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+20,1,128+7,1,128+11,1,128+7,1,128+3,1,128+3,1,128+7
!BYTE 0,1 ; Scanline repeat count
!BYTE 8,128+4,5,128+3,1,128+3,1,128+3,9,128+3,1,128+7,1,128+3,1,128+3,1,128+3,1,128+3
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+4,1,128+15,1,128+3,1,128+11,1,128+19,1,128+3,1,128+3
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+4,1,128+3,13,128+3,1,128+3,5,128+3,1,128+3,5,128+3,1,128+3,5,128+3,1,128+3
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+4,1,128+15,1,128+3,1,128+7,1,128+3,1,128+7,1,128+3,1,128+11,1,128+3
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+4,1,128+3,1,128+3,5,128+3,1,128+3,9,128+3,1,128+3,1,128+3,1,128+3,1,128+3,9,128+3
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+4,1,128+3,1,128+7,1,128+3,1,128+15,1,128+3,1,128+7,1,128+11,1,128+3
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+4,1,128+3,17,128+3,1,128+3,5,128+3,5,128+3,1,128+3,1,128+3,1,128+3,1,128+3
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+4,1,128+3,1,128+19,1,128+19,1,128+3,1,128+3,1,128+3,1,128+3
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+4,1,128+3,1,128+3,9,128+3,1,128+3,1,128+3,5,128+3,5,128+3,1,128+3,1,128+3,5,128+3
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+24,1,128+3,1,128+7,1,128+3,1,128+7,1,128+3,1,128+11
!BYTE 0,1 ; Scanline repeat count
!BYTE 21,128+3,1,128+3,1,128+3,1,128+3,1,128+3,1,128+3,1,128+3,1,128+3,9,128+3
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+8,1,128+7,1,128+7,1,128+7,1,128+11,1,128+3,1,128+11,1,128+3
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+4,1,128+3,1,128+3,1,128+3,1,128+3,1,128+3,1,128+3,1,128+3,13,128+3,9,128+3,1,128+3
!BYTE 0,3 ; Scanline repeat count
!BYTE 128+4,1,128+7,1,128+7,1,128+3,1,128+3,1,128+27,1,128+7
!BYTE 0,0 ; End of compressed map

115
rings.asm Executable file
View File

@ -0,0 +1,115 @@
!BYTE 0,1 ; Scanline repeat count
!BYTE 25,128+14,25
!BYTE 0,1 ; Scanline repeat count
!BYTE 22,128+20,22
!BYTE 0,1 ; Scanline repeat count
!BYTE 19,128+26,19
!BYTE 0,1 ; Scanline repeat count
!BYTE 17,128+30,17
!BYTE 0,1 ; Scanline repeat count
!BYTE 15,128+34,15
!BYTE 0,1 ; Scanline repeat count
!BYTE 14,128+36,14
!BYTE 0,1 ; Scanline repeat count
!BYTE 12,128+40,12
!BYTE 0,1 ; Scanline repeat count
!BYTE 11,128+42,11
!BYTE 0,1 ; Scanline repeat count
!BYTE 10,128+18,2,128+4,1,128+19,10
!BYTE 0,1 ; Scanline repeat count
!BYTE 9,128+15,6,128+4,6,128+15,9
!BYTE 0,1 ; Scanline repeat count
!BYTE 8,128+14,8,128+4,8,128+14,8
!BYTE 0,1 ; Scanline repeat count
!BYTE 7,128+13,10,128+4,10,128+13,7
!BYTE 0,1 ; Scanline repeat count
!BYTE 6,128+12,12,128+4,12,128+12,6
!BYTE 0,1 ; Scanline repeat count
!BYTE 6,128+11,13,128+4,13,128+11,6
!BYTE 0,1 ; Scanline repeat count
!BYTE 5,128+11,14,128+4,14,128+11,5
!BYTE 0,1 ; Scanline repeat count
!BYTE 4,128+11,15,128+4,15,128+11,4
!BYTE 0,1 ; Scanline repeat count
!BYTE 4,128+10,15,128+6,15,128+10,4
!BYTE 0,1 ; Scanline repeat count
!BYTE 3,128+10,13,128+12,13,128+10,3
!BYTE 0,1 ; Scanline repeat count
!BYTE 3,128+9,12,128+16,12,128+9,3
!BYTE 0,1 ; Scanline repeat count
!BYTE 2,128+10,10,128+20,10,128+10,2
!BYTE 0,1 ; Scanline repeat count
!BYTE 2,128+9,10,128+22,10,128+9,2
!BYTE 0,1 ; Scanline repeat count
!BYTE 2,128+9,9,128+24,9,128+9,2
!BYTE 0,2 ; Scanline repeat count
!BYTE 1,128+9,9,128+26,9,128+9,1
!BYTE 0,1 ; Scanline repeat count
!BYTE 1,128+8,9,128+12,4,128+12,9,128+8,1
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+9,9,128+10,8,128+10,9,128+9
!BYTE 0,2 ; Scanline repeat count
!BYTE 128+9,8,128+9,12,128+9,8,128+9
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+8,9,128+8,14,128+8,9,128+8
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+8,8,128+9,14,128+9,8,128+8
!BYTE 0,4 ; Scanline repeat count
!BYTE 128+8,8,128+8,16,128+8,8,128+8
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+8,8,128+9,14,128+9,8,128+8
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+8,9,128+8,14,128+8,9,128+8
!BYTE 0,2 ; Scanline repeat count
!BYTE 128+9,8,128+9,12,128+9,8,128+9
!BYTE 0,1 ; Scanline repeat count
!BYTE 128+9,9,128+10,8,128+10,9,128+8,1
!BYTE 0,1 ; Scanline repeat count
!BYTE 1,128+8,9,128+12,4,128+12,9,128+8,1
!BYTE 0,2 ; Scanline repeat count
!BYTE 1,128+9,9,128+26,9,128+9,1
!BYTE 0,1 ; Scanline repeat count
!BYTE 2,128+9,9,128+24,9,128+9,2
!BYTE 0,1 ; Scanline repeat count
!BYTE 2,128+9,10,128+22,10,128+9,2
!BYTE 0,1 ; Scanline repeat count
!BYTE 2,128+10,10,128+20,10,128+10,2
!BYTE 0,1 ; Scanline repeat count
!BYTE 3,128+9,12,128+16,12,128+9,3
!BYTE 0,1 ; Scanline repeat count
!BYTE 3,128+10,13,128+12,13,128+10,3
!BYTE 0,1 ; Scanline repeat count
!BYTE 4,128+10,15,128+6,15,128+10,4
!BYTE 0,1 ; Scanline repeat count
!BYTE 4,128+11,15,128+4,15,128+11,4
!BYTE 0,1 ; Scanline repeat count
!BYTE 5,128+11,14,128+4,14,128+11,5
!BYTE 0,1 ; Scanline repeat count
!BYTE 6,128+11,13,128+4,13,128+11,6
!BYTE 0,1 ; Scanline repeat count
!BYTE 6,128+12,12,128+4,12,128+12,6
!BYTE 0,1 ; Scanline repeat count
!BYTE 7,128+13,10,128+4,10,128+13,7
!BYTE 0,1 ; Scanline repeat count
!BYTE 8,128+14,8,128+4,8,128+14,8
!BYTE 0,1 ; Scanline repeat count
!BYTE 9,128+15,6,128+4,6,128+15,9
!BYTE 0,1 ; Scanline repeat count
!BYTE 10,128+17,1,128+1,1,128+4,2,128+18,10
!BYTE 0,1 ; Scanline repeat count
!BYTE 11,128+42,11
!BYTE 0,1 ; Scanline repeat count
!BYTE 12,128+40,12
!BYTE 0,1 ; Scanline repeat count
!BYTE 14,128+36,14
!BYTE 0,1 ; Scanline repeat count
!BYTE 15,128+34,15
!BYTE 0,1 ; Scanline repeat count
!BYTE 17,128+30,17
!BYTE 0,1 ; Scanline repeat count
!BYTE 19,128+26,19
!BYTE 0,1 ; Scanline repeat count
!BYTE 22,128+20,22
!BYTE 0,1 ; Scanline repeat count
!BYTE 26,128+13,25
!BYTE 0,0 ; End of compressed map

162
sincos.asm Executable file
View File

@ -0,0 +1,162 @@
SIN_TBL
!BYTE $000 ; angle 0
!BYTE $006 ; angle 1
!BYTE $00C ; angle 2
!BYTE $012 ; angle 3
!BYTE $018 ; angle 4
!BYTE $01E ; angle 5
!BYTE $024 ; angle 6
!BYTE $02A ; angle 7
!BYTE $030 ; angle 8
!BYTE $036 ; angle 9
!BYTE $03B ; angle 10
!BYTE $041 ; angle 11
!BYTE $046 ; angle 12
!BYTE $04B ; angle 13
!BYTE $050 ; angle 14
!BYTE $055 ; angle 15
!BYTE $059 ; angle 16
!BYTE $05E ; angle 17
!BYTE $062 ; angle 18
!BYTE $066 ; angle 19
!BYTE $069 ; angle 20
!BYTE $06C ; angle 21
!BYTE $070 ; angle 22
!BYTE $072 ; angle 23
!BYTE $075 ; angle 24
!BYTE $077 ; angle 25
!BYTE $079 ; angle 26
!BYTE $07B ; angle 27
!BYTE $07C ; angle 28
!BYTE $07D ; angle 29
!BYTE $07E ; angle 30
!BYTE $07E ; angle 31
COS_TBL
!BYTE $07F ; angle 32
!BYTE $07E ; angle 33
!BYTE $07E ; angle 34
!BYTE $07D ; angle 35
!BYTE $07C ; angle 36
!BYTE $07B ; angle 37
!BYTE $079 ; angle 38
!BYTE $077 ; angle 39
!BYTE $075 ; angle 40
!BYTE $072 ; angle 41
!BYTE $070 ; angle 42
!BYTE $06C ; angle 43
!BYTE $069 ; angle 44
!BYTE $066 ; angle 45
!BYTE $062 ; angle 46
!BYTE $05E ; angle 47
!BYTE $059 ; angle 48
!BYTE $055 ; angle 49
!BYTE $050 ; angle 50
!BYTE $04B ; angle 51
!BYTE $046 ; angle 52
!BYTE $041 ; angle 53
!BYTE $03B ; angle 54
!BYTE $036 ; angle 55
!BYTE $030 ; angle 56
!BYTE $02A ; angle 57
!BYTE $024 ; angle 58
!BYTE $01E ; angle 59
!BYTE $018 ; angle 60
!BYTE $012 ; angle 61
!BYTE $00C ; angle 62
!BYTE $006 ; angle 63
!BYTE $000 ; angle 64
!BYTE $0F9 ; angle 65
!BYTE $0F3 ; angle 66
!BYTE $0ED ; angle 67
!BYTE $0E7 ; angle 68
!BYTE $0E1 ; angle 69
!BYTE $0DB ; angle 70
!BYTE $0D5 ; angle 71
!BYTE $0CF ; angle 72
!BYTE $0C9 ; angle 73
!BYTE $0C4 ; angle 74
!BYTE $0BE ; angle 75
!BYTE $0B9 ; angle 76
!BYTE $0B4 ; angle 77
!BYTE $0AF ; angle 78
!BYTE $0AA ; angle 79
!BYTE $0A6 ; angle 80
!BYTE $0A1 ; angle 81
!BYTE $09D ; angle 82
!BYTE $099 ; angle 83
!BYTE $096 ; angle 84
!BYTE $093 ; angle 85
!BYTE $08F ; angle 86
!BYTE $08D ; angle 87
!BYTE $08A ; angle 88
!BYTE $088 ; angle 89
!BYTE $086 ; angle 90
!BYTE $084 ; angle 91
!BYTE $083 ; angle 92
!BYTE $082 ; angle 93
!BYTE $081 ; angle 94
!BYTE $081 ; angle 95
!BYTE $081 ; angle 96
!BYTE $081 ; angle 97
!BYTE $081 ; angle 98
!BYTE $082 ; angle 99
!BYTE $083 ; angle 100
!BYTE $084 ; angle 101
!BYTE $086 ; angle 102
!BYTE $088 ; angle 103
!BYTE $08A ; angle 104
!BYTE $08D ; angle 105
!BYTE $08F ; angle 106
!BYTE $093 ; angle 107
!BYTE $096 ; angle 108
!BYTE $099 ; angle 109
!BYTE $09D ; angle 110
!BYTE $0A1 ; angle 111
!BYTE $0A6 ; angle 112
!BYTE $0AA ; angle 113
!BYTE $0AF ; angle 114
!BYTE $0B4 ; angle 115
!BYTE $0B9 ; angle 116
!BYTE $0BE ; angle 117
!BYTE $0C4 ; angle 118
!BYTE $0C9 ; angle 119
!BYTE $0CF ; angle 120
!BYTE $0D5 ; angle 121
!BYTE $0DB ; angle 122
!BYTE $0E1 ; angle 123
!BYTE $0E7 ; angle 124
!BYTE $0ED ; angle 125
!BYTE $0F3 ; angle 126
!BYTE $0F9 ; angle 127
!BYTE $000 ; angle 128
!BYTE $006 ; angle 129
!BYTE $00C ; angle 130
!BYTE $012 ; angle 131
!BYTE $018 ; angle 132
!BYTE $01E ; angle 133
!BYTE $024 ; angle 134
!BYTE $02A ; angle 135
!BYTE $030 ; angle 136
!BYTE $036 ; angle 137
!BYTE $03B ; angle 138
!BYTE $041 ; angle 139
!BYTE $046 ; angle 140
!BYTE $04B ; angle 141
!BYTE $050 ; angle 142
!BYTE $055 ; angle 143
!BYTE $059 ; angle 144
!BYTE $05E ; angle 145
!BYTE $062 ; angle 146
!BYTE $066 ; angle 147
!BYTE $069 ; angle 148
!BYTE $06C ; angle 149
!BYTE $070 ; angle 150
!BYTE $072 ; angle 151
!BYTE $075 ; angle 152
!BYTE $077 ; angle 153
!BYTE $079 ; angle 154
!BYTE $07B ; angle 155
!BYTE $07C ; angle 156
!BYTE $07D ; angle 157
!BYTE $07E ; angle 158
!BYTE $07E ; angle 159

33
tan.asm Executable file
View File

@ -0,0 +1,33 @@
TAN_TBL
!WORD $0000 ; angle 0
!WORD $000D ; angle 1
!WORD $0019 ; angle 2
!WORD $0026 ; angle 3
!WORD $0033 ; angle 4
!WORD $0040 ; angle 5
!WORD $004E ; angle 6
!WORD $005C ; angle 7
!WORD $006A ; angle 8
!WORD $0079 ; angle 9
!WORD $0089 ; angle 10
!WORD $0099 ; angle 11
!WORD $00AB ; angle 12
!WORD $00BE ; angle 13
!WORD $00D2 ; angle 14
!WORD $00E8 ; angle 15
!WORD $0100 ; angle 16
!WORD $011A ; angle 17
!WORD $0138 ; angle 18
!WORD $0159 ; angle 19
!WORD $017F ; angle 20
!WORD $01AB ; angle 21
!WORD $01DF ; angle 22
!WORD $021D ; angle 23
!WORD $026A ; angle 24
!WORD $02CB ; angle 25
!WORD $034C ; angle 26
!WORD $03FE ; angle 27
!WORD $0507 ; angle 28
!WORD $06BE ; angle 29
!WORD $0A27 ; angle 30
!WORD $145B ; angle 31

342
utils.asm Executable file
View File

@ -0,0 +1,342 @@
;*
;* Read both game controllers in parallel
;*
GCREAD BIT GCSTROBE
LDY #$00
LDX #$00
LDA #GCMAX
GCLOOP BIT GC0
BPL +
INY
BNE ++ ; Timing
+ NOP
NOP
++ BIT GC1
BPL +
INX
BNE ++ ; Timing
+ NOP
NOP
++ SEC
SBC #$01
BNE GCLOOP
LDA GCPB1 ; Read GC buttons
ASL
LDA GCPB2
ROR
AND #$C0
RTS
;*
;* Text routines
;*
GOTOXY STX CH
STY CV
LDA TXT_TBLL,Y
STA TBAS1L
STA TBAS2L
LDA TXT_TBLH,Y
ORA #$04
STA TBAS1H
EOR #$0C
STA TBAS2H
RTS
NORMAL LDA #$FF
STA INVFLAG
RTS
INVERSE LDA #$3F
STA INVFLAG
RTS
FLASH LDA #$7F
STA INVFLAG
RTS
PUTXA PHA
TXA
JSR PUTA
PLA
PUTA PHA
LSR
LSR
LSR
LSR
TAX
LDA HEXCHR,X
JSR PUTC
PLA
AND #$0F
TAX
LDA HEXCHR,X
PUTC ORA #$80
AND INVFLAG
LDY CH
STA (TBAS1),Y
STA (TBAS2),Y
INC CH
RTS
PUTSXY JSR GOTOXY
PUTS TSX
LDA $101,X
STA LDCHR+1
LDA $102,X
STA LDCHR+2
LDX #$01
LDCHR LDA $1000,X
BEQ +
JSR PUTC
INX
BNE LDCHR
+ TXA
TSX
CLC
ADC $101,X
STA $101,X
BCC +
INC $102,X
+ RTS
HEXCHR !TEXT "0123456789ABCDEF"
;*
;* Fill screen with color
;*
GFILL LDX #$23
-- PHA
LDA TXT_TBLL,X
STA GBASL
LDA TXT_TBLH,X
ORA GPAGE
STA GBASH
PLA
LDY #39
- STA (GBASE),Y
DEY
BPL -
DEX
BPL --
RTS
;*
;* Plot X,Y with GCLR
;*
GPLOT TYA
PHA
LSR
TAY
LDA TXT_TBLL,Y
STA GPLOTA+1
STA GPLOTB+1
LDA TXT_TBLH,Y
ORA GPAGE
STA GPLOTA+2
STA GPLOTB+2
GPLOTA LDA $FFFF,X
BCC +
AND #$0F
STA TMP
LDA GCLR
AND #$F0
BCS ++
+ AND #$F0
STA TMP
LDA GCLR
AND #$0F
++ ORA TMP
GPLOTB STA $FFFF,X
-- PLA
TAY
RTS
;*
;* Plot horizontal line from X,Y to A,Y with GCLR
;*
GHLIN STA GHLRHT
TYA
PHA
LSR
TAY
LDA #$F0
BCC +
LDA #$0F
+ STA DSTMASK
EOR #$FF
STA SRCMASK
LDA TXT_TBLL,Y
STA GHLINA+1
STA GHLINB+1
LDA TXT_TBLH,Y
ORA GPAGE
STA GHLINA+2
STA GHLINB+2
GHLINA LDA $FFFF,X
AND DSTMASK
STA TMP
LDA GCLR
AND SRCMASK
ORA TMP
GHLINB STA $FFFF,X
CPX GHLRHT
BEQ --
INX
BNE GHLINA
GHLRHT !BYTE $00
;*
;* Fill rectangle fro X,Y to A,SCANLN with GCLR
;*
GRECT STX GRCTLFT
- PHA
JSR GHLIN
PLA
CPY SCANLN
BEQ +
LDX GRCTLFT
INY
BNE -
+ RTS
GRCTLFT !BYTE $00
;*
;* Swap rendered and displayed GR pages
;*
GSWAP LDA #$01
EOR CURPAGE
STA CURPAGE
TAX
LDA $C054,X
LDA PGBASE,X
STA GPAGE
RTS
;*
;* Multiply X by A, return X:A
;*
MUL8X8 LSR
STA TMP
LDA #$00
BCC + ; BIT 0
TXA
+ DEX ; Because carry will be set for ADC
STX TMP+1
LSR
ROR TMP
BCC + ; BIT 1
ADC TMP+1
+ LSR
ROR TMP
BCC + ; BIT 2
ADC TMP+1
+ LSR
ROR TMP
BCC + ; BIT 3
ADC TMP+1
+ LSR
ROR TMP
BCC + ; BIT 4
ADC TMP+1
+ LSR
ROR TMP
BCC + ; BIT 5
ADC TMP+1
+ LSR
ROR TMP
BCC + ; BIT 6
ADC TMP+1
+ LSR
ROR TMP
BCC + ; BIT 7
ADC TMP+1
+ LSR
TAX
LDA TMP
ROR
RTS
;*
;* Signed multiply 8x8
;*
SMUL8X8 STX SIGN
PHA
EOR SIGN
STA SIGN
CPX #$80
BCC +
TXA
EOR #$FF
TAX
INX
+ PLA
CMP #$80
BCC +
EOR #$FF
ADC #$00
+ JSR MUL8X8
ASL SIGN ; SIGN(RESULT) = SIGN(MULTIPLCAND) ^ SIGN(MULTIPLIER)
BCC +
EOR #$FF
ADC #$00
PHA
TXA
EOR #$FF
ADC #$00
TAX
PLA
+ RTS
;*
;* Unsigned divide, return X:A
;*
DIV LDX #$00
STX TMP ; REMNDRL
STX TMP+1 ; REMNDRH
; LDA DVSR+1 ; Check for divide by zero
; ORA DVSR
LDA DVDND+1 ; Check for zero divide
ORA DVDND
BEQ ++
LDY #$11 ; #BITS+1
- ASL DVDND
ROL DVDND+1
DEY
BCC -
- ROL TMP ; REMNDRL
ROL TMP+1 ; REMNDRH
LDA TMP ; REMNDRL
CMP DVSR
LDA TMP+1 ; REMNDRH
SBC DVSR+1
BCC +
STA TMP+1 ; REMNDRH
LDA TMP ; REMNDRL
SBC DVSR
STA TMP ; REMNDRL
SEC
+ ROL DVDND
ROL DVDND+1
DEY
BNE -
LDA DVDND
LDX DVDND+1
++ RTS
;*
;* Signed divide: return X:A
;*
SDIV LDX DVSR+1
STX SIGN
BPL +
LDA DVSR
JSR NEG
STX DVSR+1
STA DVSR
+ LDX DVDND+1
BPL +
TXA
EOR SIGN
STA SIGN
LDA DVDND
JSR NEG
STX DVDND+1
STA DVDND
+ JSR DIV
ASL SIGN ; SIGN(RESULT) = SIGN(DIVIDEND) ^ SIGN(DIVISOR)
BCC +
NEG STA TMP
STX TMP+1
LDA #$00
SEC
SBC TMP
STA TMP
LDA #$00
SBC TMP+1
TAX
LDA TMP
+ RTS