antoine-source/ultima2/STARS.S

703 lines
14 KiB
ArmAsm
Raw Normal View History

*
* 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
2024-08-03 06:56:22 +00:00
L1F00 EQU $1F00
L402C EQU $402C ; PRINTSTRING
L458A EQU $458A ; GOTOXY
L472C EQU $472C
L47EC EQU $47EC
L48AC EQU $48AC
L49CB EQU $49CB
L4E00 EQU $4E00
*----------------------------
L8900 JSR L8C01
LDA HIRES
LDA TXTCLR
LDA #$80
2024-08-03 06:56:22 +00:00
STA L1F00+$80
LDA #$40
2024-08-03 06:56:22 +00:00
STA L1F00+$81
LDX L4E00+$37
LDA L8E28,X
2024-08-03 06:56:22 +00:00
STA L1F00+$89
LDA L8E32,X
2024-08-03 06:56:22 +00:00
STA L1F00+$8A
LDA L8E3C,X
2024-08-03 06:56:22 +00:00
STA L1F00+$8B
SED
2024-08-03 06:56:22 +00:00
LDA L4E00+$AF
SEC
SBC #$01
2024-08-03 06:56:22 +00:00
STA L4E00+$AF
CLD
LDA #$28
STA $21
LDX #$1E
LDY #$14
2024-08-03 06:56:22 +00:00
JSR L458A
JSR L402C
ASC " FUEL="00
LDX #$1E
LDY #$15
2024-08-03 06:56:22 +00:00
JSR L458A
JSR L402C
ASC " XENO="00
LDX #$1E
LDY #$16
2024-08-03 06:56:22 +00:00
JSR L458A
JSR L402C
ASC " YAKO="00
LDX #$1E
LDY #$17
2024-08-03 06:56:22 +00:00
JSR L458A
JSR L402C
ASC " ZABO="00
LDA #$20
STA $21
JSR L8DE4
JSR L8C18
JSR L8C92
2024-08-03 06:56:22 +00:00
LDA L4E00+$2C
CMP #$05
BCS L89AF
2024-08-03 06:56:22 +00:00
JSR L402C
ASC 8D
ASC "YOU HAVE EXPLODED!"8D8D00
L89AC JMP L89AC
L89AF JSR L8DE4
2024-08-03 06:56:22 +00:00
JSR L402C
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
2024-08-03 06:56:22 +00:00
STA L1F00+$80
LDA #$40
2024-08-03 06:56:22 +00:00
STA L1F00+$81
JMP L89BB
2024-08-03 06:56:22 +00:00
L8A00 JSR L402C
ASC "LEFT"8D00
JSR L8BA7
LDA #$20
2024-08-03 06:56:22 +00:00
STA L1F00+$80
LDA #$40
2024-08-03 06:56:22 +00:00
STA L1F00+$81
JMP L89AF
2024-08-03 06:56:22 +00:00
L8A19 JSR L402C
ASC "RIGHT"8D00
JSR L8BA7
LDA #$DF
2024-08-03 06:56:22 +00:00
STA L1F00+$80
LDA #$40
2024-08-03 06:56:22 +00:00
STA L1F00+$81
JMP L89AF
2024-08-03 06:56:22 +00:00
L8A33 JSR L402C
ASC "CLIMB"8D00
JSR L8BA7
LDA #$10
2024-08-03 06:56:22 +00:00
STA L1F00+$81
LDA #$80
2024-08-03 06:56:22 +00:00
STA L1F00+$80
JMP L89AF
2024-08-03 06:56:22 +00:00
L8A4D JSR L402C
ASC "DIVE"8D00
JSR L8BA7
LDA #$6F
2024-08-03 06:56:22 +00:00
STA L1F00+$81
LDA #$80
2024-08-03 06:56:22 +00:00
STA L1F00+$80
JMP L89AF
L8A66 JSR L8C38
LDY #$00
2024-08-03 06:56:22 +00:00
L8A6B LDA L1F00+$00,Y
STA L1F00+$82
SEC
2024-08-03 06:56:22 +00:00
SBC L1F00+$80
BCS L8A90
EOR #$FF
LSR
LSR
LSR
LSR
TAX
2024-08-03 06:56:22 +00:00
LDA L1F00+$82
SEC
SBC L8B51,X
BCS L8A8A
JMP L8B20
2024-08-03 06:56:22 +00:00
L8A8A STA L1F00+$84
JMP L8AA4
L8A90 LSR
LSR
LSR
LSR
TAX
2024-08-03 06:56:22 +00:00
LDA L1F00+$82
CLC
ADC L8B51,X
2024-08-03 06:56:22 +00:00
STA L1F00+$84
BCC L8AA4
JMP L8B20
2024-08-03 06:56:22 +00:00
L8AA4 LDA L1F00+$40,Y
STA L1F00+$83
SEC
2024-08-03 06:56:22 +00:00
SBC L1F00+$81
BCS L8AC6
EOR #$FF
LSR
LSR
LSR
LSR
TAX
2024-08-03 06:56:22 +00:00
LDA L1F00+$83
SEC
SBC L8B61,X
2024-08-03 06:56:22 +00:00
STA L1F00+$85
BPL L8AD7
JMP L8B20
L8AC6 LSR
LSR
LSR
LSR
TAX
2024-08-03 06:56:22 +00:00
LDA L1F00+$83
CLC
ADC L8B61,X
BMI L8B20
2024-08-03 06:56:22 +00:00
STA L1F00+$85
L8AD7 STY L1F00+$88
LDA L1F00+$86
BEQ L8AEC
2024-08-03 06:56:22 +00:00
LDA L1F00+$82
STA $60
2024-08-03 06:56:22 +00:00
LDA L1F00+$83
STA $61
JSR L8B87
2024-08-03 06:56:22 +00:00
L8AEC LDY L1F00+$88
LDA L1F00+$84
STA $60
2024-08-03 06:56:22 +00:00
STA L1F00+$00,Y
LDA L1F00+$85
STA $61
2024-08-03 06:56:22 +00:00
STA L1F00+$40,Y
JSR L8B69
2024-08-03 06:56:22 +00:00
LDY L1F00+$88
INY
CPY #$40
BEQ L8B17
2024-08-03 06:56:22 +00:00
LDA L1F00+$86
CMP #$02
BCS L8B14
BIT SPKR
L8B14 JMP L8A6B
2024-08-03 06:56:22 +00:00
L8B17 LDA L1F00+$86
BEQ L8B1F
JSR WAIT
L8B1F RTS
L8B20 BIT SPKR
2024-08-03 06:56:22 +00:00
LDA L1F00+$00,Y
STA L1F00+$82
LDA L1F00+$40,Y
STA L1F00+$83
JSR L8B43
2024-08-03 06:56:22 +00:00
STA L1F00+$84
JSR L8B43
AND #$7F
2024-08-03 06:56:22 +00:00
STA L1F00+$85
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
2024-08-03 06:56:22 +00:00
LDA L472C,Y
STA $FE
2024-08-03 06:56:22 +00:00
LDA L47EC,Y
2024-08-03 14:56:20 +00:00
STA $FE+1
LDX $60
2024-08-03 06:56:22 +00:00
LDY L48AC,X
INY
2024-08-03 06:56:22 +00:00
LDA L49CB,X
ORA ($FE),Y
STA ($FE),Y
RTS
L8B87 LDA $61
CLC
ADC #$10
TAY
2024-08-03 06:56:22 +00:00
LDA L472C,Y
STA $FE
2024-08-03 06:56:22 +00:00
LDA L47EC,Y
2024-08-03 14:56:20 +00:00
STA $FE+1
LDX $60
2024-08-03 06:56:22 +00:00
LDY L48AC,X
INY
2024-08-03 06:56:22 +00:00
LDA L49CB,X
EOR #$FF
AND ($FE),Y
STA ($FE),Y
RTS
2024-08-03 06:56:22 +00:00
L8BA7 LDA L1F00+$80
STA $60
2024-08-03 06:56:22 +00:00
LDA L1F00+$81
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
2024-08-03 06:56:22 +00:00
LDA L1F00+$80
SEC
SBC #$03
STA $60
2024-08-03 06:56:22 +00:00
LDA L1F00+$81
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
2024-08-03 06:56:22 +00:00
STA L1F00+$00,Y
JSR L8B43
AND #$7F
2024-08-03 06:56:22 +00:00
STA L1F00+$40,Y
DEY
BPL L8C1D
RTS
L8C2F LDA #$3B
2024-08-03 06:56:22 +00:00
STA L4E00+$
LDA #$67
STA $4F
RTS
2024-08-03 06:56:22 +00:00
L8C38 LDA L1F00+$80
STA $60
2024-08-03 06:56:22 +00:00
LDA L1F00+$81
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
2024-08-03 06:56:22 +00:00
LDA L1F00+$80
SEC
SBC #$03
STA $60
2024-08-03 06:56:22 +00:00
LDA L1F00+$81
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
2024-08-03 06:56:22 +00:00
L8C92 JSR L402C
ASC "HYPERWARP ENGAGED!"8D00
LDA #$80
2024-08-03 06:56:22 +00:00
STA L1F00+$87
LDA #$00
2024-08-03 06:56:22 +00:00
STA L1F00+$86
JSR L8C2F
L8CB6 JSR L8A66
2024-08-03 06:56:22 +00:00
DEC L1F00+$87
BNE L8CB6
LDA #$80
2024-08-03 06:56:22 +00:00
STA L1F00+$87
LDA #$01
2024-08-03 06:56:22 +00:00
STA L1F00+$86
JSR L8DE4
JSR L8C2F
L8CCE JSR L8A66
2024-08-03 06:56:22 +00:00
DEC L1F00+$87
BNE L8CCE
2024-08-03 06:56:22 +00:00
INC L1F00+$86
L8CD9 JSR L8A66
2024-08-03 06:56:22 +00:00
INC L1F00+$86
INC L1F00+$86
BPL L8CD9
2024-08-03 06:56:22 +00:00
LDA L4E00+$AF
LSR
BCC L8D1C
LSR
BCC L8D1C
STA $4F
2024-08-03 06:56:22 +00:00
JSR L402C
ASC "SHIP OFF COURSE!"8D00
JSR L8B43
AND #$07
2024-08-03 06:56:22 +00:00
STA L1F00+$89
JSR L8B43
AND #$07
2024-08-03 06:56:22 +00:00
STA L1F00+$8A
JSR L8B43
AND #$07
2024-08-03 06:56:22 +00:00
STA L1F00+$8B
L8D1C JSR L8E46
RTS
2024-08-03 06:56:22 +00:00
L8D20 LDA L4E00+$AF
BNE L8D36
2024-08-03 06:56:22 +00:00
JSR L402C
ASC "NO FUEL!"878D00
JMP L89AF
L8D36 SED
SEC
SBC #$01
2024-08-03 06:56:22 +00:00
STA L4E00+$AF
CLD
JSR L8BA7
LDA #$80
2024-08-03 06:56:22 +00:00
STA L1F00+$80
LDA #$40
2024-08-03 06:56:22 +00:00
STA L1F00+$81
JSR L402C
ASC "HYPERWARP TO:"8D
ASC "XENO="00
JSR L8DCA
2024-08-03 06:56:22 +00:00
STA L1F00+$89
JSR L402C
ASC " YAKO="00
JSR L8DCA
2024-08-03 06:56:22 +00:00
STA L1F00+$8A
JSR L402C
ASC " ZABO="00
JSR L8DCA
2024-08-03 06:56:22 +00:00
STA L1F00+$8B
JSR L402C
ASC 8D
ASC "PREPARE FOR HYPERWARP!"8D00
JSR L8C2F
L8DA7 JSR L8A66
2024-08-03 06:56:22 +00:00
DEC L1F00+$86
LDA L1F00+$86
CMP #$02
BNE L8DA7
LDA #$40
2024-08-03 06:56:22 +00:00
STA L1F00+$87
JSR L8C2F
L8DBC JSR L8A66
2024-08-03 06:56:22 +00:00
DEC L1F00+$87
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
2024-08-03 06:56:22 +00:00
JSR L458A
LDA L4E00+$AF
JSR PRBYTE
LDX #$25
LDY #$15
2024-08-03 06:56:22 +00:00
JSR L458A
LDA L1F00+$89
JSR PRBYTE
LDX #$25
LDY #$16
2024-08-03 06:56:22 +00:00
JSR L458A
LDA L1F00+$8A
JSR PRBYTE
LDX #$25
LDY #$17
2024-08-03 06:56:22 +00:00
JSR L458A
LDA L1F00+$8B
JSR PRBYTE
LDA #$20
STA $21
LDX #$00
LDY #$17
2024-08-03 06:56:22 +00:00
JSR L458A
RTS
* PLANET COORDINATES
L8E28 HEX 06050306010209040009
L8E32 HEX 06040302030804000109
L8E3C HEX 06050403040506050409
2024-08-03 06:56:22 +00:00
L8E46 LDA L1F00+$89
CMP #$04
BNE L8E78
2024-08-03 06:56:22 +00:00
LDA L1F00+$8A
CMP #$04
BNE L8E78
2024-08-03 06:56:22 +00:00
LDA L1F00+$8B
CMP #$04
BNE L8E78
2024-08-03 06:56:22 +00:00
JSR L402C
ASC 8D8D
ASC "YOU HIT THE SUN!"8D00
JSR L8C01
L8E75 JMP L8E75
L8E78 LDX #$09
L8E7A LDA L8E28,X
2024-08-03 06:56:22 +00:00
CMP L1F00+$89
BNE L8E92
LDA L8E32,X
2024-08-03 06:56:22 +00:00
CMP L1F00+$8A
BNE L8E92
LDA L8E3C,X
2024-08-03 06:56:22 +00:00
CMP L1F00+$8B
BEQ L8EB8
L8E92 DEX
BPL L8E7A
2024-08-03 06:56:22 +00:00
JSR L402C
ASC "YOU ARE IN DEEP SPACE."8D00
LDA #$0A
2024-08-03 06:56:22 +00:00
STA L4E00+$37
JMP L8F8A
L8EB8 TXA
2024-08-03 06:56:22 +00:00
STA L4E00+$37
JSR L402C
ASC "YOU ARE ORBITING "00
2024-08-03 06:56:22 +00:00
LDA L4E00+$37
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
2024-08-03 06:56:22 +00:00
L8EFB JSR L402C
ASC "EARTH."8D00
JMP L8F8A
2024-08-03 06:56:22 +00:00
L8F09 JSR L402C
ASC "MERCURY."8D00
JMP L8F8A
2024-08-03 06:56:22 +00:00
L8F19 JSR L402C
ASC "VENUS."8D00
JMP L8F8A
2024-08-03 06:56:22 +00:00
L8F27 JSR L402C
ASC "MARS."8D00
JMP L8F8A
2024-08-03 06:56:22 +00:00
L8F34 JSR L402C
ASC "JUPITER."8D00
JMP L8F8A
2024-08-03 06:56:22 +00:00
L8F44 JSR L402C
ASC "SATURN."8D00
JMP L8F8A
2024-08-03 06:56:22 +00:00
L8F53 JSR L402C
ASC "URANUS."8D00
JMP L8F8A
2024-08-03 06:56:22 +00:00
L8F62 JSR L402C
ASC "NEPTUNE."8D00
JMP L8F8A
2024-08-03 06:56:22 +00:00
L8F72 JSR L402C
ASC "PLUTO."8D00
JMP L8F8A
2024-08-03 06:56:22 +00:00
L8F80 JSR L402C
ASC "X."8D00
JMP L8F8A
L8F8A RTS
L8F8B JSR L8BA7
LDA #$80
2024-08-03 06:56:22 +00:00
STA L1F00+$80
LDA #$40
2024-08-03 06:56:22 +00:00
STA L1F00+$81
JSR L402C
ASC "LANDING REQUESTED!"8D00
JSR L8E46
2024-08-03 06:56:22 +00:00
LDA L4E00+$37
CMP #$0A
BNE L8FD0
2024-08-03 06:56:22 +00:00
JSR L402C
ASC "REQUEST DENIED!"8D00
JMP L89AF
L8FD0 CMP #$00
BNE L9002
2024-08-03 06:56:22 +00:00
JSR L402C
ASC "(INSERT PLAYER DISK)"8D00
L8FED JSR L8A66
LDA KBD
CMP #$9B
BNE L8FED
LDA #$00
2024-08-03 06:56:22 +00:00
STA L4E00+$14
LDA #$04
2024-08-03 06:56:22 +00:00
STA L4E00+$13
RTS
2024-08-03 06:56:22 +00:00
L9002 JSR L402C
ASC "(INSERT GALACTIC DISK)"8D00
L901D JSR L8A66
LDA KBD
CMP #$9B
BNE L901D
LDA #$00
2024-08-03 06:56:22 +00:00
STA L4E00+$14
LDA L4E00+$37
STA L4E00+$13
RTS