.nolist #include "asm.inc" #include "ion.inc" .list .org $9D93 #define lampstate saferam1 #define carx saferam1+2 #define tunnelx saferam1+4 #define tunnely saferam1+5 #define cary saferam1+6 #define tunnelcount saferam1+8 .db $BB,$6D ret jr nc,start .db "Speed Extreme",0 start: bcall(_clrscrnfull) bcall(_grbufclr) ld hl,background ld de,plotsscreen ld bc,768 ldir call ionFastCopy ld a,1 ld (lampstate),a ld a,40 ld (carx),a call lamps1 call XorCar MainLoop: ld hl,$8000 ld de,$8000 ld bc,250 ldir ld a,$ff out (1),a ld a,Group7 out (1),a in a,(1) cp kMode ret z ld a,(lampstate) cp 7 jr nc,skipmoveonground ld a,$ff out (1),a ld a,Group1 out (1),a in a,(1) cp kLeft call z,MoveCarLeftOnGround cp kRight call z,MoveCarRightOnGround skipmoveonground: ld a,$ff out (1),a ld a,Group7 out (1),a in a,(1) cp k2nd jp z,BeginFlying ld a,(lampstate) inc a ld (lampstate),a cp $80 jr z,swaplight1with2 or a jr z,swaplight2with1 jr MainLoop swaplight1with2: call lamps1 call lamps2 jp MainLoop swaplight2with1: call lamps2 call lamps1 jp MainLoop MoveCarLeftOnGround: ld a,(carx) cp 21 ret c call XorCar ld a,(carx) dec a ld (carx),a jp XorCar MoveCarRightOnGround: ld a,(carx) cp 58 ret nc call XorCar ld a,(carx) inc a ld (carx),a jp XorCar lamps1: ld b,17 ld l,54-17 ld a,14 ld ix,lightposttall call ionPutSprite ld ix,lightposttall ld a,23 ld l,45-8 ld b,8 call ionPutSprite ld ix,lightpostshort ld a,31 ld l,39-8 ld b,8 call ionPutSprite ld a,48 ld l,36 ld b,27 ld ix,RoadStripe call ionPutSprite jp ionFastCopy lamps2: ld b,17 ld l,61-17 ld a,7 ld ix,lightposttall call ionPutSprite ld a,22 ld l,48-8 ld b,8 call ionPutSprite ld a,48 ld l,33 ld b,27 ld ix,RoadStripe call ionPutSprite jp ionFastCopy XorCar: ld ix,Car ld a,(carx) ld l,62-8 ld b,8 ld c,2 jp ionLargeSprite XorCarFly: ld ix,Car ld a,(cary) ld l,a ld a,(carx) ld b,8 ld c,2 jp ionLargeSprite BeginFlying: ld hl,flyingbground ld de,plotsscreen ld bc,768 ldir ld a,23 ld (tunnelx),a ld a,6 ld (tunnely),a ld a,27 ld (carx),a ld a,10 ld (cary),a ld hl,1 ld (tunnelcount),hl call XorTunnel call XorCarFly call flystripe1 call ionFastCopy Flyloop: ld hl,$8000 ld de,$8000 ld bc,3000 ldir ld a,$ff out (1),a ld a,Group7 out (1),a in a,(1) cp kMode ret z ld a,$ff out (1),a ld a,Group1 out (1),a in a,(1) cp kLeft call z,MoveCarLeftInAir cp kRight call z,MoveCarRightInAir cp kUp call z,MoveCarUpInAir cp kDown call z,MoveCarDownInAir ld b,5 call ionRandom cp 4 call z,MoveTunnelDown cp 3 call z,MoveTunnelUp cp 2 call z,MoveTunnelLeft cp 1 call z,MoveTunnelRight ld a,(carx) ld b,a ld a,(tunnelx) cp b jr z,flyover add a,16 cp b jr z,flyover ld a,(cary) ld b,a ld a,(tunnely) cp b jr z,flyover add a,12 cp b jr z,flyover ld hl,(tunnelcount) inc hl ld (tunnelcount),hl ld a,h cp $03 jp z,SpaceStart ld a,l sra a jr c,SwapFlyStripes jr nc,SwapFlyStripes2 flyover: ret SwapFlyStripes: call flystripe1 call flystripe2 jp Flyloop SwapFlyStripes2: call flystripe2 call flystripe1 jp Flyloop flystripe1: ld ix,FlyStripe ld a,44 ld l,44 ld b,18 jp ionPutSprite flystripe2: ld ix,FlyStripe ld a,44 ld l,46 ld b,18 jp ionPutSprite MoveCarLeftInAir: ld a,(carx) call XorCarFly ld a,(carx) dec a ld (carx),a ld b,a ld a,(tunnelx) cp b jr z,carhittunnel call XorCarFly jp ionFastCopy MoveCarRightInAir: ld a,(carx) call XorCarFly ld a,(carx) inc a ld (carx),a ld b,a ld a,(tunnelx) add a,16 cp b jr z,carhittunnel call XorCarFly jp ionFastCopy MoveCarUpInAir: ld a,(cary) call XorCarFly ld a,(cary) dec a ld (cary),a ld b,a ld a,(tunnely) cp b jr z,carhittunnel call XorCarFly jp ionFastCopy MoveCarDownInAir: ld a,(cary) call XorCarFly ld a,(cary) inc a ld (cary),a ld b,a ld a,(tunnely) add a,12 cp b jr z,carhittunnel call XorCarFly jp ionFastCopy carhittunnel: pop hl ret MoveTunnelDown: ld a,(tunnely) cp 6 ret nc call XorTunnel ld a,(tunnely) inc a ld (tunnely),a jr XorTunnel MoveTunnelUp: ld a,(tunnely) cp 1 ret c call XorTunnel ld a,(tunnely) dec a ld (tunnely),a jr XorTunnel MoveTunnelLeft: ld a,(tunnelx) cp 17 ret c call XorTunnel ld a,(tunnelx) dec a ld (tunnelx),a jr XorTunnel MoveTunnelRight: ld a,(tunnelx) cp 73-32 ret nc call XorTunnel ld a,(tunnelx) inc a ld (tunnelx),a jr XorTunnel XorTunnel: ld c,4 ld b,20 ld ix,Tunnel ld a,(tunnely) ld l,a ld a,(tunnelx) call ionLargeSprite jp ionFastCopy SpaceStart: ld hl,plotsscreen ld bc,768 fillloop: ld (hl),$ff dec bc ld a,b or c jr nz,fillloop ret lightposttall: .db %01111000 .db %10001000 .db %10011100 .db %10001000 .db %10000000 .db %10000000 .db %10000000 .db %10000000 .db %10000000 .db %10000000 .db %10000000 .db %10000000 .db %10000000 .db %10000000 .db %10000000 .db %10000000 .db %10000000 lightpostshort: .db %01110000 .db %10010000 .db %10000000 .db %10000000 .db %10000000 .db %10000000 .db %10000000 .db %10000000 RoadStripe: .db %11000000 .db %11000000 .db %11000000 .db %00000000 .db %00000000 .db %00000000 .db %11000000 .db %11000000 .db %11000000 .db %00000000 .db %00000000 .db %00000000 .db %11000000 .db %11000000 .db %11000000 .db %00000000 .db %00000000 .db %00000000 .db %11000000 .db %11000000 .db %11000000 .db %00000000 .db %00000000 .db %00000000 .db %11000000 .db %11000000 .db %11000000 FlyStripe: .db %10000000 .db %10000000 .db %00000000 .db %00000000 .db %10000000 .db %10000000 .db %00000000 .db %00000000 .db %10000000 .db %10000000 .db %00000000 .db %00000000 .db %10000000 .db %10000000 .db %00000000 .db %00000000 .db %10000000 .db %10000000 tunnel: .db %01111111,%11111111,%111111111,%11111110 .db %11111111,%11111111,%111111111,%11111111 .db %11000000,%00000000,%000000000,%00000011 .db %11000000,%00000000,%000000000,%00000011 .db %11000000,%00000000,%000000000,%00000011 .db %11000000,%00000000,%000000000,%00000011 .db %11000000,%00000000,%000000000,%00000011 .db %11000000,%00000000,%000000000,%00000011 .db %11000000,%00000000,%000000000,%00000011 .db %11000000,%00000000,%000000000,%00000011 .db %11000000,%00000000,%000000000,%00000011 .db %11000000,%00000000,%000000000,%00000011 .db %11000000,%00000000,%000000000,%00000011 .db %11000000,%00000000,%000000000,%00000011 .db %11000000,%00000000,%000000000,%00000011 .db %11000000,%00000000,%000000000,%00000011 .db %11000000,%00000000,%000000000,%00000011 .db %11000000,%00000000,%000000000,%00000011 .db %11111111,%11111111,%111111111,%11111111 .db %01111111,%11111111,%111111111,%11111110 Car: .db %00000111,%11100000 .db %00011000,%00011000 .db %01100111,%11100110 .db %10000000,%00000001 .db %10111111,%11111101 .db %01000000,%00000011 .db %00100011,%11000100 .db %00011100,%00111000 flyingbground: .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$01,$40,$00 .db $00,$0A,$00,$00,$00,$00,$00,$00,$00,$0A,$A8,$00 .db $15,$55,$00,$00,$00,$00,$00,$00,$00,$15,$55,$00 .db $2A,$AA,$00,$00,$00,$00,$00,$00,$00,$00,$28,$00 .db $15,$50,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $02,$A0,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF .db $00,$00,$00,$00,$01,$00,$40,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$01,$00,$40,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$01,$00,$40,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$01,$00,$40,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$01,$00,$20,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$02,$00,$20,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$02,$00,$20,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$02,$00,$20,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$02,$00,$20,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$02,$00,$20,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$02,$00,$10,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$04,$00,$10,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$04,$00,$10,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$04,$00,$10,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$04,$00,$10,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$04,$00,$10,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$0C,$00,$08,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$08,$00,$08,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$08,$00,$08,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$08,$00,$08,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$08,$00,$08,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$08,$00,$0C,$00,$00,$00,$00,$00 .db $00,$00,$00,$00,$10,$00,$04,$00,$00,$00,$00,$00 background: .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$10,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$28,$00,$00,$00,$00,$00,$00,$00,$00 .db $00,$00,$00,$44,$00,$00,$00,$00,$00,$00,$2A,$00 .db $00,$00,$00,$82,$00,$00,$00,$00,$00,$15,$55,$40 .db $00,$00,$01,$FF,$00,$00,$00,$00,$00,$02,$A2,$00 .db $00,$08,$01,$55,$10,$00,$3F,$00,$00,$00,$00,$00 .db $00,$14,$01,$FF,$28,$00,$2D,$00,$00,$00,$00,$00 .db $00,$AA,$01,$55,$44,$00,$3F,$00,$00,$00,$00,$00 .db $01,$55,$41,$FF,$82,$00,$2D,$00,$00,$00,$00,$00 .db $0A,$AA,$81,$55,$FF,$00,$3F,$00,$00,$FF,$80,$00 .db $00,$00,$09,$FF,$55,$00,$2D,$FF,$00,$AA,$80,$00 .db $00,$00,$15,$55,$FF,$00,$3F,$55,$02,$FF,$83,$FE .db $00,$00,$23,$FF,$55,$00,$2D,$FF,$05,$AA,$83,$FE .db $00,$00,$7F,$55,$FF,$1F,$FF,$55,$0F,$FF,$82,$AA .db $00,$00,$55,$FF,$FF,$15,$6D,$FF,$0A,$AA,$FF,$FE .db $00,$00,$7F,$55,$55,$1A,$BF,$55,$FD,$FF,$AA,$AA .db $7F,$00,$55,$FF,$FF,$15,$6D,$FF,$5A,$AA,$AB,$FE .db $55,$00,$7F,$55,$55,$FA,$BF,$55,$AD,$FF,$FE,$AA .db $6B,$0F,$D5,$FF,$FF,$55,$6D,$FF,$5A,$AA,$AB,$FE .db $55,$0A,$FF,$55,$55,$FA,$BF,$55,$AD,$FF,$FE,$AA .db $6B,$0D,$55,$FF,$FF,$55,$6D,$FF,$5A,$AA,$AB,$FE .db $55,$FA,$FF,$55,$55,$FA,$BF,$55,$AD,$FF,$FE,$AA .db $6B,$5D,$55,$FF,$FF,$55,$6D,$FF,$5A,$AA,$AB,$FE .db $55,$FA,$FF,$55,$55,$FA,$BF,$55,$AD,$FF,$FE,$AA .db $6B,$5D,$55,$FF,$FF,$55,$6D,$FF,$5A,$AA,$AB,$FE .db $55,$FA,$FF,$55,$55,$FA,$BF,$55,$AD,$FF,$FE,$AA .db $6B,$5D,$55,$FF,$FF,$55,$6D,$FF,$5A,$AA,$AB,$FE .db $55,$FA,$FF,$55,$55,$FA,$BF,$55,$AD,$FF,$FE,$AA .db $6B,$5D,$55,$FF,$FF,$55,$6D,$FF,$5A,$AA,$AB,$FE .db $55,$FA,$FF,$55,$55,$FA,$BF,$55,$AD,$FF,$FE,$AA .db $6B,$5D,$55,$FF,$FF,$55,$6D,$FF,$5A,$AA,$AB,$FE .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF .db $00,$00,$00,$00,$00,$80,$00,$80,$00,$00,$00,$00 .db $00,$00,$00,$00,$01,$00,$00,$40,$00,$00,$00,$00 .db $00,$00,$00,$00,$02,$00,$00,$20,$00,$00,$00,$00 .db $00,$00,$00,$00,$04,$00,$00,$10,$00,$00,$00,$00 .db $00,$00,$00,$00,$08,$00,$00,$08,$00,$00,$00,$00 .db $00,$00,$00,$00,$10,$00,$00,$04,$00,$00,$00,$00 .db $00,$00,$00,$00,$20,$00,$00,$02,$00,$00,$00,$00 .db $00,$00,$00,$00,$40,$00,$00,$01,$00,$00,$00,$00 .db $00,$00,$00,$00,$80,$00,$00,$00,$80,$00,$00,$00 .db $00,$00,$00,$01,$00,$00,$00,$00,$40,$00,$00,$00 .db $00,$00,$00,$02,$00,$00,$00,$00,$20,$00,$00,$00 .db $00,$00,$00,$04,$00,$00,$00,$00,$10,$00,$00,$00 .db $00,$00,$00,$08,$00,$00,$00,$00,$08,$00,$00,$00 .db $00,$00,$00,$10,$00,$00,$00,$00,$04,$00,$00,$00 .db $00,$00,$00,$20,$00,$00,$00,$00,$02,$00,$00,$00 .db $00,$00,$00,$40,$00,$00,$00,$00,$01,$00,$00,$00 .db $00,$00,$00,$80,$00,$00,$00,$00,$00,$80,$00,$00 .db $00,$00,$01,$00,$00,$00,$00,$00,$00,$40,$00,$00 .db $00,$00,$02,$00,$00,$00,$00,$00,$00,$20,$00,$00 .db $00,$00,$04,$00,$00,$00,$00,$00,$00,$10,$00,$00 .db $00,$00,$08,$00,$00,$00,$00,$00,$00,$08,$00,$00 .db $00,$00,$10,$00,$00,$00,$00,$00,$00,$04,$00,$00 .db $00,$00,$20,$00,$00,$00,$00,$00,$00,$02,$00,$00 .db $00,$00,$40,$00,$00,$00,$00,$00,$00,$01,$00,$00 .db $00,$00,$80,$00,$00,$00,$00,$00,$00,$00,$80,$00 .db $00,$01,$00,$00,$00,$00,$00,$00,$00,$00,$40,$00 .db $00,$02,$00,$00,$00,$00,$00,$00,$00,$00,$20,$00 .db $00,$04,$00,$00,$00,$00,$00,$00,$00,$00,$10,$00 .db $00,$08,$00,$00,$00,$00,$00,$00,$00,$00,$08,$00 .db $00,$10,$00,$00,$00,$00,$00,$00,$00,$00,$04,$00 .db $00,$20,$00,$00,$00,$00,$00,$00,$00,$00,$02,$00 .end