antoine-source/ultima2/STARS.S

694 lines
13 KiB
ArmAsm

*
* Ultima II: The Revenge of the Enchanteress
*
* (c) 1982, Sierra On-Line
* (s) 2020, John Disam
*
TYP BIN
ORG $8900
MX %11
LST OFF
*----------------------------
KBD EQU $C000
KBDSTROBE EQU $C010
SPKR EQU $C030
TXTCLR EQU $C050
HIRES EQU $C057
WAIT EQU $FCA8
PRBYTE EQU $FDDA
COUT EQU $FDED
*----------------------------
L8900 JSR L8C01
LDA HIRES
LDA TXTCLR
LDA #$80
STA $1F80
LDA #$40
STA $1F81
LDX $4E37
LDA L8E28,X
STA $1F89
LDA L8E32,X
STA $1F8A
LDA L8E3C,X
STA $1F8B
SED
LDA $4EAF
SEC
SBC #$01
STA $4EAF
CLD
LDA #$28
STA $21
LDX #$1E
LDY #$14
JSR $458A
JSR $402C
ASC " FUEL="00
LDX #$1E
LDY #$15
JSR $458A
JSR $402C
ASC " XENO="00
LDX #$1E
LDY #$16
JSR $458A
JSR $402C
ASC " YAKO="00
LDX #$1E
LDY #$17
JSR $458A
JSR $402C
ASC " ZABO="00
LDA #$20
STA $21
JSR L8DE4
JSR L8C18
JSR L8C92
LDA $4E2C
CMP #$05
BCS L89AF
JSR $402C
ASC 8D
ASC "YOU HAVE EXPLODED!"8D8D00
L89AC JMP L89AC
L89AF JSR L8DE4
JSR $402C
ASC "CMD: "00
L89BB JSR L8A66
LDA KBD
BPL L89BB
BIT KBDSTROBE
CMP #$88
BNE L89CD
JMP L8A00
L89CD CMP #$95
BNE L89D4
JMP L8A19
L89D4 CMP #$8D
BNE L89DB
JMP L8A33
L89DB CMP #$AF ; /
BNE L89E2
JMP L8A4D
L89E2 CMP #$C8 ; H
BNE L89E9
JMP L8D20
L89E9 CMP #$CC ; L
BNE L89F0
JMP L8F8B
L89F0 JSR L8BA7
LDA #$80
STA $1F80
LDA #$40
STA $1F81
JMP L89BB
L8A00 JSR $402C
ASC "LEFT"8D00
JSR L8BA7
LDA #$20
STA $1F80
LDA #$40
STA $1F81
JMP L89AF
L8A19 JSR $402C
ASC "RIGHT"8D00
JSR L8BA7
LDA #$DF
STA $1F80
LDA #$40
STA $1F81
JMP L89AF
L8A33 JSR $402C
ASC "CLIMB"8D00
JSR L8BA7
LDA #$10
STA $1F81
LDA #$80
STA $1F80
JMP L89AF
L8A4D JSR $402C
ASC "DIVE"8D00
JSR L8BA7
LDA #$6F
STA $1F81
LDA #$80
STA $1F80
JMP L89AF
L8A66 JSR L8C38
LDY #$00
L8A6B LDA $1F00,Y
STA $1F82
SEC
SBC $1F80
BCS L8A90
EOR #$FF
LSR
LSR
LSR
LSR
TAX
LDA $1F82
SEC
SBC L8B51,X
BCS L8A8A
JMP L8B20
L8A8A STA $1F84
JMP L8AA4
L8A90 LSR
LSR
LSR
LSR
TAX
LDA $1F82
CLC
ADC L8B51,X
STA $1F84
BCC L8AA4
JMP L8B20
L8AA4 LDA $1F40,Y
STA $1F83
SEC
SBC $1F81
BCS L8AC6
EOR #$FF
LSR
LSR
LSR
LSR
TAX
LDA $1F83
SEC
SBC L8B61,X
STA $1F85
BPL L8AD7
JMP L8B20
L8AC6 LSR
LSR
LSR
LSR
TAX
LDA $1F83
CLC
ADC L8B61,X
BMI L8B20
STA $1F85
L8AD7 STY $1F88
LDA $1F86
BEQ L8AEC
LDA $1F82
STA $60
LDA $1F83
STA $61
JSR L8B87
L8AEC LDY $1F88
LDA $1F84
STA $60
STA $1F00,Y
LDA $1F85
STA $61
STA $1F40,Y
JSR L8B69
LDY $1F88
INY
CPY #$40
BEQ L8B17
LDA $1F86
CMP #$02
BCS L8B14
BIT SPKR
L8B14 JMP L8A6B
L8B17 LDA $1F86
BEQ L8B1F
JSR WAIT
L8B1F RTS
L8B20 BIT SPKR
LDA $1F00,Y
STA $1F82
LDA $1F40,Y
STA $1F83
JSR L8B43
STA $1F84
JSR L8B43
AND #$7F
STA $1F85
BIT SPKR
JMP L8AD7
L8B43 CLC
LDA $4E
ADC #$09
ADC $4F
LDX $4E
STA $4E
STX $4F
RTS
L8B51 HEX 0102030405060708090A0B0C0D0E0F10
L8B61 HEX 0102030405060708
L8B69 LDA $61
CLC
ADC #$10
TAY
LDA $472C,Y
STA $FE
LDA $47EC,Y
STA $FF
LDX $60
LDY $48AC,X
INY
LDA $49CB,X
ORA ($FE),Y
STA ($FE),Y
RTS
L8B87 LDA $61
CLC
ADC #$10
TAY
LDA $472C,Y
STA $FE
LDA $47EC,Y
STA $FF
LDX $60
LDY $48AC,X
INY
LDA $49CB,X
EOR #$FF
AND ($FE),Y
STA ($FE),Y
RTS
L8BA7 LDA $1F80
STA $60
LDA $1F81
SEC
SBC #$03
STA $61
JSR L8B87
INC $61
JSR L8B87
INC $61
JSR L8B87
INC $61
JSR L8B87
INC $61
JSR L8B87
INC $61
JSR L8B87
INC $61
JSR L8B87
LDA $1F80
SEC
SBC #$03
STA $60
LDA $1F81
STA $61
JSR L8B87
INC $60
JSR L8B87
INC $60
JSR L8B87
INC $60
INC $60
JSR L8B87
INC $60
JSR L8B87
INC $60
JSR L8B87
RTS
L8C01 LDA #$20
STA $FD
LDA #$00
TAY
STA $FC
L8C0A STA ($FC),Y
INY
BNE L8C0A
INC $FD
LDX $FD
CPX #$40
BCC L8C0A
RTS
L8C18 JSR L8C2F
LDY #$3F
L8C1D JSR L8B43
STA $1F00,Y
JSR L8B43
AND #$7F
STA $1F40,Y
DEY
BPL L8C1D
RTS
L8C2F LDA #$3B
STA $4E
LDA #$67
STA $4F
RTS
L8C38 LDA $1F80
STA $60
LDA $1F81
SEC
SBC #$03
STA $61
JSR L8B69
INC $61
JSR L8B69
INC $61
JSR L8B69
INC $61
JSR L8B69
INC $61
JSR L8B69
INC $61
JSR L8B69
INC $61
JSR L8B69
LDA $1F80
SEC
SBC #$03
STA $60
LDA $1F81
STA $61
JSR L8B69
INC $60
JSR L8B69
INC $60
JSR L8B69
INC $60
INC $60
JSR L8B69
INC $60
JSR L8B69
INC $60
JSR L8B69
RTS
L8C92 JSR $402C
ASC "HYPERWARP ENGAGED!"8D00
LDA #$80
STA $1F87
LDA #$00
STA $1F86
JSR L8C2F
L8CB6 JSR L8A66
DEC $1F87
BNE L8CB6
LDA #$80
STA $1F87
LDA #$01
STA $1F86
JSR L8DE4
JSR L8C2F
L8CCE JSR L8A66
DEC $1F87
BNE L8CCE
INC $1F86
L8CD9 JSR L8A66
INC $1F86
INC $1F86
BPL L8CD9
LDA $4EAF
LSR
BCC L8D1C
LSR
BCC L8D1C
STA $4F
JSR $402C
ASC "SHIP OFF COURSE!"8D00
JSR L8B43
AND #$07
STA $1F89
JSR L8B43
AND #$07
STA $1F8A
JSR L8B43
AND #$07
STA $1F8B
L8D1C JSR L8E46
RTS
L8D20 LDA $4EAF
BNE L8D36
JSR $402C
ASC "NO FUEL!"878D00
JMP L89AF
L8D36 SED
SEC
SBC #$01
STA $4EAF
CLD
JSR L8BA7
LDA #$80
STA $1F80
LDA #$40
STA $1F81
JSR $402C
ASC "HYPERWARP TO:"8D
ASC "XENO="00
JSR L8DCA
STA $1F89
JSR $402C
ASC " YAKO="00
JSR L8DCA
STA $1F8A
JSR $402C
ASC " ZABO="00
JSR L8DCA
STA $1F8B
JSR $402C
ASC 8D
ASC "PREPARE FOR HYPERWARP!"8D00
JSR L8C2F
L8DA7 JSR L8A66
DEC $1F86
LDA $1F86
CMP #$02
BNE L8DA7
LDA #$40
STA $1F87
JSR L8C2F
L8DBC JSR L8A66
DEC $1F87
BNE L8DBC
JSR L8C92
JMP L89AF
L8DCA JSR L8A66
LDA KBD
CMP #$B0
BCC L8DCA
CMP #$BA
BCS L8DCA
BIT KBDSTROBE
PHA
JSR COUT
PLA
SEC
SBC #$B0
RTS
L8DE4 LDA #$28
STA $21
LDX #$25
LDY #$14
JSR $458A
LDA $4EAF
JSR PRBYTE
LDX #$25
LDY #$15
JSR $458A
LDA $1F89
JSR PRBYTE
LDX #$25
LDY #$16
JSR $458A
LDA $1F8A
JSR PRBYTE
LDX #$25
LDY #$17
JSR $458A
LDA $1F8B
JSR PRBYTE
LDA #$20
STA $21
LDX #$00
LDY #$17
JSR $458A
RTS
* PLANET COORDINATES
L8E28 HEX 06050306010209040009
L8E32 HEX 06040302030804000109
L8E3C HEX 06050403040506050409
L8E46 LDA $1F89
CMP #$04
BNE L8E78
LDA $1F8A
CMP #$04
BNE L8E78
LDA $1F8B
CMP #$04
BNE L8E78
JSR $402C
ASC 8D8D
ASC "YOU HIT THE SUN!"8D00
JSR L8C01
L8E75 JMP L8E75
L8E78 LDX #$09
L8E7A LDA L8E28,X
CMP $1F89
BNE L8E92
LDA L8E32,X
CMP $1F8A
BNE L8E92
LDA L8E3C,X
CMP $1F8B
BEQ L8EB8
L8E92 DEX
BPL L8E7A
JSR $402C
ASC "YOU ARE IN DEEP SPACE."8D00
LDA #$0A
STA $4E37
JMP L8F8A
L8EB8 TXA
STA $4E37
JSR $402C
ASC "YOU ARE ORBITING "00
LDA $4E37
CMP #$00
BEQ L8EFB
CMP #$01
BEQ L8F09
CMP #$02
BEQ L8F19
CMP #$03
BEQ L8F27
CMP #$04
BEQ L8F34
CMP #$05
BEQ L8F44
CMP #$06
BEQ L8F53
CMP #$07
BEQ L8F62
CMP #$08
BEQ L8F72
JMP L8F80
L8EFB JSR $402C
ASC "EARTH."8D00
JMP L8F8A
L8F09 JSR $402C
ASC "MERCURY."8D00
JMP L8F8A
L8F19 JSR $402C
ASC "VENUS."8D00
JMP L8F8A
L8F27 JSR $402C
ASC "MARS."8D00
JMP L8F8A
L8F34 JSR $402C
ASC "JUPITER."8D00
JMP L8F8A
L8F44 JSR $402C
ASC "SATURN."8D00
JMP L8F8A
L8F53 JSR $402C
ASC "URANUS."8D00
JMP L8F8A
L8F62 JSR $402C
ASC "NEPTUNE."8D00
JMP L8F8A
L8F72 JSR $402C
ASC "PLUTO."8D00
JMP L8F8A
L8F80 JSR $402C
ASC "X."8D00
JMP L8F8A
L8F8A RTS
L8F8B JSR L8BA7
LDA #$80
STA $1F80
LDA #$40
STA $1F81
JSR $402C
ASC "LANDING REQUESTED!"8D00
JSR L8E46
LDA $4E37
CMP #$0A
BNE L8FD0
JSR $402C
ASC "REQUEST DENIED!"8D00
JMP L89AF
L8FD0 CMP #$00
BNE L9002
JSR $402C
ASC "(INSERT PLAYER DISK)"8D00
L8FED JSR L8A66
LDA KBD
CMP #$9B
BNE L8FED
LDA #$00
STA $4E14
LDA #$04
STA $4E13
RTS
L9002 JSR $402C
ASC "(INSERT GALACTIC DISK)"8D00
L901D JSR L8A66
LDA KBD
CMP #$9B
BNE L901D
LDA #$00
STA $4E14
LDA $4E37
STA $4E13
RTS