* * Ultima II: The Revenge of the Enchanteress * * (c) 1982, Sierra On-Line * (s) 2020, John Disam * TYP BIN ORG $6000 MX %11 LST OFF *---------------------------- L0800 = $0800 L1000 = $1000 ; UL L1A00 = $1A00 ; II - Pointer at $1A00, file at $1A40? L7800 = $7800 L8000 = $8000 ; FL L8C00 = $8C00 ; WII SOFTEV EQU $03F2 PWREDUP EQU $03F4 KBD EQU $C000 KBDSTROBE EQU $C010 SPKR EQU $C030 TXTCLR EQU $C050 TXTSET EQU $C051 MIXCLR EQU $C052 MIXSET EQU $C053 HIRES EQU $C057 VTAB EQU $FC22 HOME EQU $FC58 WAIT EQU $FCA8 RDKEY EQU $FD0C COUT EQU $FDED RESETV EQU $FFFC *---------------------------- JSR HOME JSR L7280 ; PROTECTION ASC 04 ASC "NOMON I,O,C"8D00 JSR HOME LDX #$0F LDY #$0C JSR L678A JSR L66F8 ASC "ULTIMA ]["0D00 JSR L7280 ; PROTECTION ASC 04 ASC "BLOAD UPDATE.OBJ"0D ASC 04 ASC "BLOAD SHAPES"0D ASC 04 ASC "BLOAD TABLES.903C.OBJ"0D00 LDA KBD CMP #$D0 ; P BNE L608B LDX #$0D LDY #$0C JSR L678A JSR L73F7 ; PROTECTION ASC "PLAY ULTIMA ]["0D00 JMP L63D4 L608B JSR L7280 ; PROTECTION ASC 04 ASC "BLOAD UL,A$1000"0D ASC 04 ASC "BLOAD II,A$1A40"0D ASC 04 ASC "BLOAD FL,A$8000"0D ASC 04 ASC "BLOAD WII,A$8C00"0D00 LDA #$00 STA $EF L60D8 JSR HOME BIT TXTSET LDA KBD CMP #$9B BNE L60E8 JMP L627F L60E8 LDA #$11 STA $4E LDA #$27 STA $4F LDX #$0C LDY #$0A JSR L678A JSR L73F7 ASC "ON-LINE SYSTEMS"00 LDX #$0C LDY #$0C JSR L678A JSR L66F8 ASC "PROUDLY PRESENTS"0D00 LDA #$EF STA $FC LDA #$50 STA $FD JSR L679D LDA KBD CMP #$9B BNE L613C JMP L627F L613C JSR HOME LDX #$10 LDY #$08 JSR L678A JSR L66F8 ASC "PART " ASC ']['00 LDX #$09 LDY #$0A JSR L678A JSR L73F7 ASC "OF THE #1 BEST SELLING"00 LDX #$07 LDY #$0C JSR L678A JSR L66F8 ASC "FANTASY ROLE-PLAYING GAME"00 LDX #$0C LDY #$0E JSR L678A JSR L66F8 ASC "BY LORD BRITISH"0D00 LDA #$DF STA $FC LDA #$58 STA $FD JSR L679D LDA KBD CMP #$9B BNE L61C6 JMP L627F L61C6 JSR L6719 JSR L71AB LDA HIRES LDA MIXCLR LDA TXTCLR LDA #$CF STA $FC LDA #$60 STA $FD JSR L679D LDA KBD CMP #$9B BNE L61EA JMP L627F L61EA LDA #$20 STA $FD LDA #$40 STA $FB LDA #$00 STA $FC STA $FA LDY #$00 L61FA LDA ($FC),Y STA ($FA),Y INC $FC INC $FA BNE L61FA INC $FD INC $FB LDA $FD CMP #$40 BCC L61FA LDA HIRES LDA MIXCLR LDA TXTCLR JSR L6806 LDA KBD CMP #$9B BNE L6224 JMP L627F L6224 JSR L71D1 LDY #$FF L6229 LDX #$FF L622B STX $F0 JSR L6792 CMP #$20 BCS L6237 BIT SPKR L6237 LDX $F0 DEX BNE L622B DEY BNE L6229 JSR L71BD JSR L71D1 LDA #$0A STA $F0 L6249 LDA #$FF JSR WAIT LDA #$FF JSR WAIT LDA #$FF JSR WAIT LDA #$FF JSR WAIT LDA #$FF JSR WAIT JSR L71E3 LDA #$40 JSR WAIT JSR L71E3 DEC $F0 BNE L6249 LDA $EF BEQ L627F LDA KBD CMP #$9B BEQ L627F JMP L6414 L627F JSR HOME BIT KBDSTROBE LDA #$0F STA $24 JSR L73F7 ASC "ULTIMA ]["0A0A00 LDA #$10 STA $24 JSR L66F8 ASC "REVENGE"0A0A00 LDA #$10 STA $24 JSR L66F8 ASC "OF THE"0A0A00 LDA #$0E STA $24 JSR L66F8 ASC "ENCHANTRESS"00 LDA #$15 STA $25 LDA #$08 STA $24 JSR L66F8 ASC 0A ASC "(C)-1982 BY LORD BRITISH"00 LDA #$0B STA $24 JSR L66F8 ASC 0A ASC "AND ON-LINE SYSTEMS"00 LDA #$0A STA $25 LDA #$05 STA $24 JSR L66F8 ASC 0A ASC "TYPE -"00 LDA #$06 STA $24 JSR L66F8 ASC 0A0A ASC "'D' - FOR A DEMONSTRATION"00 LDA #$06 STA $24 JSR L66F8 ASC 0A0A ASC "'P' - PLAY A GAME OF ULTIMA ]["00 LDA #$06 STA $24 JSR L66F8 ASC 0A0A ASC "'C' - CREATE A NEW CHARACTER"00 BIT TXTSET LDA #$05 STA $24 JSR L73F7 ASC 0A0A ASC "CHOICE:"00 LDX #$30 L63A8 LDA KBD BPL L63A8 JSR COUT CMP #$C4 ; D BNE L63B7 JMP L6414 L63B7 CMP #$D0 ; P BEQ L63D4 CMP #$C3 ; C BEQ L63C2 JMP L627F L63C2 JSR L7280 ; PROTECTION ASC 0D ASC 04 ASC "BRUN CREATE"0D00 L63D4 JSR L66F8 ASC 0D ASC 04 ASC "BLOAD STD SUBS.OBJ"0D ASC 04 ASC "BLOAD DNGDRAW.OBJ"0D ASC 04 ASC "BRUN ULTIMA II.OBJ"0D00 L6414 JSR HOME LDA #$01 STA $EF LDX #$0F LDY #$0C JSR L678A JSR L66F8 ASC "ULTIMA ]["8D00 BIT TXTSET JSR L66F8 ASC 04 ASC "BLOAD PIC.OUT"8D00 BIT MIXSET BIT HIRES BIT TXTCLR JSR L66F8 ASC 8D8D8D8D8D8D8D8D8D8D8D8D ASC " BATTLE STRANGE CREATURES"8D ASC " ACROSS THE FACE OF THE EARTH"8D00 LDA KBD CMP #$9B BNE L64AD JMP L627F L64AD JSR L66F8 ASC 04 ASC "BLOAD PIC.TWN,A$4000"8D8D8D ASC " SEARCH FOR CLUES IN CARELESS WORDS"8D ASC " SPOKEN AT THE LOCAL PUB"8D00 JSR L66D6 LDA KBD CMP #$9B BNE L651C JMP L627F L651C JSR L66F8 ASC 04 ASC "BLOAD PIC.CAS,A$4000"8D8D8D ASC " PLEAD WITH MEDIEVAL KINGS"8D ASC " FOR ASSISTANCE"8D00 JSR L66D6 LDA KBD CMP #$9B BNE L6583 JMP L627F L6583 JSR L66F8 ASC 04 ASC "BLOAD PIC.DNG,A$4000"8D8D8D ASC " TRAVERSE DEEP DARK DEADLY DUNGEONS"8D ASC " AND TALL TERRIFYING TOWERS"8D00 JSR L66D6 LDA KBD CMP #$9B BNE L65F4 JMP L627F L65F4 JSR L66F8 ASC 04 ASC "BLOAD PIC.SPA,A$4000"8D8D8D ASC " TRAVEL THROUGHOUT THE GALAXY"8D ASC " TO THE PLANETS OF OUR SOLAR SYSTEM"8D00 JSR L66D6 LDA KBD CMP #$9B BNE L6666 JMP L627F L6666 JSR L66F8 ASC 04 ASC "BLOAD PIC.MIN,A$4000"8D8D8D ASC " AND CONQUER TIME ITSELF TO BATTLE"8D ASC " MINAX THE ENCHANTRESS"8D00 JSR L66D6 LDY #$20 L66CB LDA #$FF JSR WAIT DEY BNE L66CB JMP L60D8 L66D6 LDA #$5F STA $FD LDA #$3F STA $FF LDA #$00 STA $FC STA $FE LDY #$00 L66E6 LDA ($FC),Y STA ($FE),Y DEY BNE L66E6 DEC $FF DEC $FD LDA $FD CMP #$40 BCS L66E6 RTS L66F8 PLA STA $FE PLA STA $FF LDY #$00 L6700 INC $FE BNE L6706 INC $FF L6706 LDA ($FE),Y BEQ L6712 ORA #$80 JSR COUT JMP L6700 L6712 LDA $FF PHA LDA $FE PHA RTS L6719 LDA #$20 STA $FD LDA #$00 STA $FC TAY L6722 STA ($FC),Y INY BNE L6722 INC $FD LDX $FD CPX #$40 BCC L6722 RTS CMP #$00 BEQ L673B BPL L6739 LDA #$FF RTS L6739 LDA #$01 L673B RTS L673C JSR RDKEY CMP #$B0 BCC L673C CMP #$BA BCS L673C JSR COUT SEC SBC #$B0 ASL ASL ASL ASL STA $FC L6753 JSR RDKEY CMP #$88 BNE L6760 JSR COUT JMP L673C L6760 CMP #$B0 BCC L6753 CMP #$BA BCS L6753 JSR COUT SEC SBC #$B0 CLC ADC $FC STA $FC L6773 JSR RDKEY CMP #$88 BNE L6783 JSR COUT JSR COUT JMP L673C L6783 CMP #$8D BNE L6773 LDA $FC RTS L678A STX $24 STY $25 JSR VTAB RTS L6792 LDA $4E ADC $4F LDX $4F STX $4E STA $4F RTS L679D LDA $FC STA L6804 LDA #$01 STA L6803 L67A7 LDA $FD L67A9 PHA LDX L6804 L67AD DEX BNE L67AD BIT SPKR LDX L6803 L67B6 DEX BNE L67B6 BIT SPKR PLA TAX DEX TXA BNE L67A9 LDA L6803 CLC ADC #$01 CMP #$1B BEQ L67D5 STA L6803 DEC L6804 JMP L67A7 L67D5 LDA $FD L67D7 PHA LDX L6804 L67DB DEX BNE L67DB BIT SPKR LDX L6803 L67E4 DEX BNE L67E4 BIT SPKR PLA TAX DEX TXA BNE L67D7 LDA L6803 SEC SBC #$01 CMP #$01 BEQ L6805 STA L6803 INC L6804 JMP L67D5 L6803 HEX 35 L6804 HEX 32 L6805 RTS L6806 LDA #$00 STA $0F LDA #$00 STA $00 LDA #$00 STA $01 LDA #$01 STA $02 STA $10 JSR L6854 LDA $0F EOR #$01 STA $0F LDA $10 CLC ADC #$02 STA $11 L6828 LDA $11 STA $02 JSR L6854 LDX $0F LDA $C054,X LDA $0F EOR #$01 STA $0F LDA $10 STA $02 LDA $11 STA $10 JSR L6854 LDA $02 CLC ADC #$02 CMP #$6C BCC L684F RTS L684F STA $11 JMP L6828 L6854 STA $0B STX $0C STY $0D LDA $02 PHA LDY #$00 STY $0A LDA #L68CD STA $06 LDX #$6C STX $08 L686D LDY $02 CPY #$FF BEQ L68C3 LDA $927D,Y STA $03 LDA $933D,Y STA $04 LDA $0F BEQ L6887 LDA $04 EOR #$60 STA $04 L6887 LDX #$13 STX $09 LDX #$00 LDY $0A L688F LDA ($05,X) BEQ L68B2 BMI L68AC EOR ($03),Y AND #$7F STA ($03),Y STX $F0 JSR L6792 CMP #$04 BCS L68A7 BIT SPKR L68A7 LDX $F0 JMP L68B2 L68AC EOR ($03),Y ORA #$80 STA ($03),Y L68B2 INY INC $05 BNE L68B9 INC $06 L68B9 DEC $09 BPL L688F DEC $02 DEC $08 BNE L686D L68C3 PLA STA $02 LDA $0B LDX $0C LDY $0D RTS L68CD HEX 000000000000000020552A0500000000 HEX 0000000000000000000000402A552A55 HEX 0A000000000000000000000000502A51 HEX 2A552A552A552A010000000000000000 HEX 2A552A542A552A552A552A1500000000 HEX 000000502A550A552A552A552A552A55 HEX 00000000000020552A5522550A000000 HEX 000020550000000000402A552A552801 HEX 20552A552A5502540200000000542A55 HEX 2A1500542A552A552A552A010A000000 HEX 20552A552A452A552A552A552A552A15 HEX 0A00000028552A552A512A552A552A55 HEX 2A552A55280000002A552A0500542A55 HEX 2A552A552A552A55280000002A550200 HEX 00552A552A552A552A552A5522010000 HEX 2A01000000552A552A552A552A552A40 HEX 220100000200000020552A0500552A55 HEX 2A552A40220500000000000028552A41 HEX 03502A1500502A000A05000000000000 HEX 2A552A78434302402A452A010A050000 HEX 000000002A552A7843432A552A152A15 HEX 2A040000000000402A052A7843432A55 HEX 2A552A1528040000000000502A452879 HEX 43512A552A552A552805000000000000 HEX 0040226103542A552A552A5528050000 HEX 000028552A450A0500552A552A552A55 HEX 2805000000502A552A452A542A552A55 HEX 2A552A152801000000552A552A452A55 HEX 2A552A552A552A010000000028552A55 HEX 2A012A552A552A150000000000000000 HEX 2A552A552A5428552A552A0100000000 HEX 000000002A552A552A5428552A550A00 HEX 00000000000000002A552A550A552855 HEX 2A55000000000000000000002A552A55 HEX 085528552A1500000000000000000000 HEX 000000000A5528552A00000000000000 HEX 0000000000002A150A55285500000000 HEX 000000000000000000002A450A552855 HEX 00000000000000000000000000402A45 HEX 0A552805000000000000000000000000 HEX 00402A450A5528010000000000000000 HEX 0000000000502A450A150A0100000000 HEX 000000000000000000502A552A440204 HEX 00000000000000000000000000542A55 HEX 2A400004000000000000000000000000 HEX 00542A552A5500100000000000000000 HEX 0000000000552A552A55541000000000 HEX 000000000000000000552A552A55502A HEX 05000000000000000000000020552A55 HEX 2A55522A550000000000000000000000 HEX 20552A552A55522A5502000000000000 HEX 0000000028552A552A554A2A552A0000 HEX 000000000000000028552A552A554A2A HEX 552A050000000000000000002A552A55 HEX 2A552A2A552A55000000000000000000 HEX 2A552A550A552A2A552A550200000000 HEX 000000002A552A552A542A29552A550A HEX 00000000000000002A552A552A542A21 HEX 552A552A00000000000000002A552A55 HEX 2A512A25552A552A0100000000000000 HEX 2A552A552A512A05552A552A05000000 HEX 000000002A552A552A452A15542A552A HEX 15000000000000002A552A552A452A55 HEX 002A552A55000000000000002A552A55 HEX 2A152A550000552A5502000000000000 HEX 2A552A552A1528550200522A550A0000 HEX 000000002A552A552A5520550A00082A HEX 552A0000000000002A552A552A550255 HEX 2A002028552A0100000000002A552A55 HEX 2A550A542A012001552A050000000000 HEX 2A552A552A552A542A050001542A1500 HEX 000000002A552A552A552A502A150004 HEX 402A5500000000002A552A552A552A41 HEX 2A550010002A5502000000002A552A55 HEX 2A552A012A5502500028550A00000000 HEX 2A552A552A552A0028550A400000552A HEX 000000002A552A552A552A0020552A00 HEX 0200542A050000002A552A552A552A00 HEX 00552A010800402A550000002A552A55 HEX 2A552A0000542A0528000028552A0100 HEX 2A552A552A552A0000502A1520000000 HEX 552A15002A552A552A550A0000402A55 HEX 00010000000000002A552A552A550A00 HEX 00002A5502040000000000002A552A55 HEX 2A550A00000028550A50000000000000 HEX 2A552A552A550A00000020552A000200 HEX 000000002A552A552A550A0000000055 HEX 2A410200000000002A552A552A550200 HEX 000000542A550000000000002A552A55 HEX 2A550200000000542A55000000000000 HEX 2A552A552A550200000000502A150000 HEX 000000002A552A552A55020000000040 HEX 2A050000000000002A552A552A550200 HEX 0000000028010000000000002A552A55 HEX 2A550200000000000000000000000000 HEX 2A552A552A5500000000000000000000 HEX 000000002A552A552A55000000000000 HEX 00000000000000002A552A552A550000 HEX 0000000000000000000000002A552A55 HEX 2A550000000000000000000000000000 HEX 2A552A552A5500000000000000000000 HEX 000000002A552A552A15000000000000 HEX 00000000000000002A552A552A150000 HEX 0000000000000000000000002A552A55 HEX 2A150000000000000000000000000000 HEX 2A552A552A1500000000000000000000 HEX 000000002A552A552A15000000000000 HEX 00000000000000002A552A552A150000 HEX 0000000000000000000000002A552A55 HEX 2A050000000000000000000000000000 HEX 2A552A552A0500000000000000000000 HEX 000000002A552A552A05000000000000 HEX 00000000000000002A552A552A050000 HEX 0000000000000000000000002A552A55 HEX 2A050000000000000000000000000000 HEX 2A552A552A0500000000000000000000 HEX 000000002A552A552A01000000000000 HEX 00000000000000002A552A552A010000 HEX 0000000000000000000000002A552A55 HEX 2A010000000000000000000000000000 HEX 2A552A552A0100000000000000000000 HEX 000000002A552A552A01000000000000 HEX 00000000000000002A552A552A010000 HEX 0000000000000000000000002A552A55 HEX 2A000000000000000000000000000000 HEX 2A552A552A0000000000000000000000 HEX 000000002A552A552A00000000000000 HEX 00000000000000002A552A552A000000 HEX 0000000000000000000000002A552A55 HEX 2A000000000000000000000000000000 HEX 2A552A552A0000000000000000000000 HEX 000000002A552A550A00000000000000 HEX 00000000000000002A552A550A000000 HEX 0000000000000000000000002A552A55 HEX 0A000000000000000000000000000000 L713D LDA #L0800 STA $01 JMP L7150 L7148 LDA #L7800 STA $01 L7150 LDY #$00 L7152 LDA ($00),Y JSR L71A5 CMP #$00 BEQ L7188 CMP #$FF BEQ L716D STA L719F+1 LDA ($00),Y JSR L71A5 STA L719F+2 JMP L719D L716D LDA ($00),Y JSR L71A5 CMP #$FF BNE L7180 LDA ($00),Y JSR L71A5 STA $02 JMP L7152 L7180 STA L719F+2 LDA #$FF STA L719F+1 L7188 LDA ($00),Y JSR L71A5 CMP #$00 BNE L7192 RTS L7192 STA L719F+2 LDA #$00 STA L719F+1 JMP L7152 L719D LDA $02 L719F STA $4132 JMP L7152 L71A5 INY BNE L71AA INC $01 L71AA RTS L71AB LDA #$20 ; UL STA $08 LDA #>L1000 STA $06 LDA #L1A00 STA $06 LDA #L8000 STA $06 LDA #L8C00 STA $06 LDA #