* Init_Intro_Graphics SEP #$20 NOP LDA #$41 STAL $E0C029 REP #$20 NOP LDX #$8000 LDA #$0000 :loop STAL $E11FFE,X DEX DEX BNE :loop SEP #$20 NOP LDA #$C1 STAL $E0C029 REP #$20 NOP LDA #$000F LDX #$0000 LDY #$003C JSR Set_SCBs_to_Pal PHB LDX #LE417 LDY #$0200 LDA #$00B5 ; MVN TWGS_Control,ptr000000 , $BC0000,$000000 MVN $BC0000,$000000 PLB RTS Copy_SCB_Tail SEP #$30 NOP STY $CB LDY #$00 :scb_loop LDA SCB_Tail_Data,Y STAL $E19D00,X INY INX CPX $CB BCC :scb_loop REP #$30 NOP RTS SCB_Tail_Data HEX 000000010101 ; probably one of the "TransWarp GS" tails HEX 020304050606 HEX 0708090A0B0B Set_SCBs_to_Pal INY STY $CB SEP #$20 NOP :loop STAL $E19D00,X INX CPX $CB BCC :loop REP #$20 NOP RTS Get_Byte_from_SourcePtr LDA [SrcPtr32] INC SrcPtr32 ; inc low word of pointer AND #$00FF ; strip high byte RTS Put_Byte_to_DestPtr SEP #$20 NOP STA [DstPtr32] REP #$20 NOP INC DstPtr32 ; inc low word of pointer RTS Unpack_Data LDX #$0001 JSR Get_Byte_from_SourcePtr CMP #$0080 BCC :literal_data ; ? AND #$0077 PHA JSR Get_Byte_from_SourcePtr TAX BEQ :done PLA :literal_data CLC ADC $E1 :repeat_loop JSR Put_Byte_to_DestPtr DEX BNE :repeat_loop BRA Unpack_Data :done PLA RTS LE227 JSR Get_Byte_from_SourcePtr JSR Put_Byte_to_DestPtr DEX BNE LE227 RTS Unpack_to_Screen STZ $E1 LDA #^Image_Data_Packed ; #$00BC STA SrcPtr32+2 LDA #$00E1 STA DstPtr32+2 LDA #$2000 LE240 STA DstPtr32 LDA #Image_Data_Packed STA SrcPtr32 JSR Unpack_Data LDA #Image_Data2_Packed STA SrcPtr32 JSR Unpack_Data RTS Load_Palettes LDX #$0000 LDY #$0000 :copy_rgb_word LDA Master_Palette_Data,Y STAL $E19E00,X INY INY TYA AND #$001F ; keeps resetting source index after each palette written TAY INX INX CPX #$01E0 ; palettes 0 - 14 now the same? BCC :copy_rgb_word LDY #$0000 :gen_fade_col_loop LDA Color_Fade_Lookup_Values,Y AND #$00FF ASL TAX LDA Color_Fade_RGB_Table,X PHA TYA ASL ; *2 ASL ; *4 ASL ; *8 ASL ; *16 ASL ; *32 = same color in the next palette TAX ; as our index PLA STAL $E19E0E,X ; store next fade color INY CPY #$000C ; not all palettes... up to pal 12 BCC :gen_fade_col_loop LDX #$0000 :next_pal PHX LDA Pattern_Table,X AND #$00FF ASL ASL TAY TXA XBA LSR LSR LSR TAX CLC ADC #$0010 STA $CB LDA Pattern_RGB_Table,Y :create_rgb STAL $E19E10,X CLC ADC Pattern_RGB_Table+2,Y INX INX CPX $CB BCC :create_rgb PLX INX CPX #$000C BCC :next_pal RTS Master_Palette_Data HEX 00000600270149047B07AD0AFF0FDF08 HEX 00002202440466068808AA0ACC0CFF0F Color_Fade_Lookup_Values HEX 000000010304030403020100 Color_Fade_RGB_Table DW $08DF DW $09DF DW $0BEF DW $0CEF DW $0EFF Pattern_Table HEX 000102020203030404040505 Pattern_RGB_Table HEX 100020001001200210011002 HEX 000100020101020201000200 Setup_Palette_12 LDX #$001F :copy_loop LDA Palette_12_Data,X STAL $E19F80,X DEX BPL :copy_loop RTS Palette_12_Data HEX 000000040007000B000F700FF00FF007 HEX F000F700FF007F000F000B0007000400 * @todo: Investigate. Possibly the animation vectors. Generate_Cached_Lookup_Table LDA #$2000 LDX #$0000 LDY #$0012 :loop STA Buffer_36,X CLC ADC #$008C ; 140 INX INX DEY BNE :loop LDA #$29D8 LDX #$0000 LDY #$0012 :loop2 STA Buffer2_36,X CLC ADC #$001F ; 31 INX INX DEY BNE :loop2 RTS SHGR_Offset_for_X_Y TYA XBA LSR STA DstPtr32 LSR LSR ADC DstPtr32 STA DstPtr32 TXA ADC DstPtr32 ADC #$2000 TAY RTS Fill_Bank_E1_with_Byte PHA TXA TYX TAY PLA SEP #$20 NOP :fill_loop STAL $E10000,X INX DEY BNE :fill_loop REP #$20 NOP RTS Generate_Grayscale_Color_15 LDA #$0000 LDX #$0000 :write_color_15_loop STAL $E19E1E,X PHA TXA CLC ADC #$0020 TAX PLA ADC #$0111 CPX #$0200 BCC :write_color_15_loop RTS LE3B6 PHB PEA $E1E1 ; PLB ; set bank to E1 PLB ; STA $CB TXA EOR #$FFFF SEC ADC #$00A0 STA $F5 :loop PHX SEP #$20 NOP LDA #$00 :zero STA |$0000,Y INY DEX BNE :zero REP #$20 NOP TYA CLC ADC $F5 TAY PLX DEC $CB BNE :loop PLB RTS LE3E4 PHB PEA $E1E1 PLB PLB STX $FF SEP #$20 NOP LDA #$01 STA $E1 XBA LDA #$00 LE3F6 CLC LE3F7 ADC #$0F LE3F9 CMP $FF BCC LE403 SBC $FF INC $E1 BRA LE3F9 LE403 XBA ASL ASL ASL ASL ORA $E1 STA |$0000,Y XBA INY DEX BNE LE3F6 REP #$20 NOP PLB RTS *----------- LE417 = * HEX 4C77028BA9E1E148ABABA90000E220EA HEX A5E3C5E5B00285E5A5E3E5E5EB1AEBC5 HEX E5B0F78F920200EB8F9C0200A5E58FA0 HEX 02008F9402008F980200C220EAA9A000 HEX 38E5E585F564EFA5ED85F1A6F3207702 HEX A5EF1865EB85EF38E5ED901085EFA5F3 HEX 1865E385F3A5EF38E5EDB0F0981865F5 HEX A8C6F1D0D6AB6B8A8F8B0200988F8E02 HEX 00E230EAA900AAA8EB18BD0000990000 HEX EB6900C9009002E900EB8A6900AAC8C0 HEX 0090E7C230EA8A186F8B0200AA98186F HEX 8E0200A860 *--- $0200 code for reference * JMP L0277 * *L0203 PHB * LDA #$E1E1 * PHA * PLB * PLB * LDA #$0000 * SEP #$20 * NOP * LDA $E3 * CMP $E5 * BCS L0218 * STA $E5 *L0218 LDA $E3 *L021A SBC $E5 * XBA * INC * XBA * CMP $E5 * BCS L021A * STAL L0291+1 * XBA * STAL L029B+1 * LDA $E5 * STAL L029F+1 * STAL L0293+1 * STAL L0297+1 * REP #$20 * NOP * LDA #$00A0 * SEC * SBC $E5 * STA $F5 * STZ $EF * LDA $ED * STA $F1 *L024B LDX $F3 * JSR L0277 * LDA $EF * CLC * ADC $EB * STA $EF * SEC * SBC $ED * BCC L026C *L025C STA $EF * LDA $F3 * CLC * ADC $E3 * STA $F3 * LDA $EF * SEC * SBC $ED * BCS L025C *L026C TYA * CLC * ADC $F5 * TAY * DEC $F1 * BNE L024B * PLB * RTL * *L0277 TXA * STAL L028A+1 * TYA * STAL L028D+1 * SEP #$30 * NOP * LDA #$00 * TAX * TAY * XBA * CLC *L028A LDA |$0000,X *L028D STA |$0000,Y * XBA *L0291 ADC #$00 *L0293 CMP #$00 * BCC L0299 *L0297 SBC #$00 *L0299 XBA * TXA *L029B ADC #$00 * TAX * INY *L029F CPY #$00 * BCC L028A * REP #$30 * NOP * TXA * CLC * ADCL L028A+1 * TAX * TYA * CLC * ADCL L028D+1 * TAY * RTS *----------- END OF $200 CODE LE4CC STZ $D7 STZ $D9 STZ $DB RTS LE4D3 LDA $D9 BNE LE4ED JSR Get_Byte_from_SourcePtr PHA AND #$007F STA $D9 PLA AND #$0080 STA $D7 BEQ LE4ED JSR Get_Byte_from_SourcePtr STA $DB LE4ED LDA $D7 BEQ LE4F5 LDA $DB BRA LE4F8 LE4F5 JSR Get_Byte_from_SourcePtr LE4F8 DEC $D9 RTS LE4FB STZ $DD STZ $DF RTS LE500 LDA $DD BNE LE50F JSR LE4D3 XBA STA $DF LDA #$0004 STA $DD LE50F LDA #$0000 ASL $DF BCC LE519 LDA #$00F0 LE519 ASL $DF BCC LE520 ORA #$000F LE520 DEC $DD RTS LE523 STA $E1 STX SrcPtr32 LDA #^TWGS_Control ; $00BC STA SrcPtr32+2 LDX #$0000 JSR SHGR_Offset_for_X_Y STY $D3 LDA #$00E1 STA $D5 JSR Get_Byte_from_SourcePtr INC STA $FF LDA #$00A0 SEC SBC $FF LSR CLC ADC $D3 STA $D3 JSR Get_Byte_from_SourcePtr INC STA $CD RTS LE552 JSR LE523 JSR LE4CC JSR LE4FB LE55B LDA $FF STA $CB LE55F JSR LE500 AND $E1 EOR [$D3] STA [$D3] INC $D3 DEC $CB BNE LE55F LDA $D3 SEC SBC $FF ADC #$009F STA $D3 DEC $CD BNE LE55B RTS LE57D JSR LE523 JSR LE4CC LE583 LDA $FF STA $CB LE587 JSR LE4D3 EOR [$D3] JSR Put_Byte_to_DestPtr DEC $CB BNE LE587 LDA $D3 SEC SBC $FF ADC #$009F STA $D3 DEC $CD BNE LE583 RTS LE5A2 JSR Init_Intro_Graphics JSR Unpack_to_Screen JSR Load_Palettes JSR Generate_Cached_Lookup_Table RTS Play_Startup_Intro PHP REP #$30 NOP LDA TWGS_Config_Byte AND #$0004 BEQ LE60C SEP #$20 NOP LDAL $E0C029 ; store gfx mode PHA REP #$20 NOP PHB PHD PHK PLB PEA $0000 PLD JSR Read_TWGS_Mode PHA JSR IRQ_Logic_OFF JSR GS_FAST PHA JSR TWGS_ON LE5DB PHA STZ Fake_Key_Flag JSR LE5A2 JSR LA8F7 JSR LA95D JSR LE62E JSR LE93F JSR LA9A0 PLA JSR SET_TW_MODE PLA JSR GS_Speed_Restore PLA JSR Set_TWGS_Mode_Keep_Cache PLD PLB SEP #$20 NOP JSR Clear_Text_Pages_E0_E1 PLA STAL $E0C029 REP #$20 NOP LE60C PLP RTS MX %10 Clear_Text_Pages_E0_E1 LDX #$0000 LDA #$A0 LE613 STAL $E00400,X STAL $E10400,X INX CPX #$0400 BCC LE613 STAL $E0C051 STAL $E0C052 STAL TXTPAGE1 RTS MX %00 LE62E STZ $BD STZ $B9 STZ $BB LE634 JSR LE649 JSR LE7E6 JSR Check_Key BCS LE648 INC $BD LDA $BD CMP #$5DD4 BCC LE634 LE648 RTS LE649 LDA $B9 BNE LE672 LDA $BD CMP #$0014 BCC LE66B JSR Generate_Grayscale_Color_15 LDA #LDE07 STA $9F STA $A5 STA $A7 STZ $AF STZ $B1 STZ $B3 STZ $B5 INC $B9 LE66A RTS LE66B LDY #$2710 LE66E DEY BNE LE66E RTS LE672 CMP #$0001 BNE LE66A LDA ($9F) AND #$00FF LSR STA $C1 LDA #$00A0 SEC SBC $C1 SBC $C1 STA $F7 LDY #$0002 LDA ($9F),Y LE68E AND #$00FF STA $F9 DEY LDA ($9F),Y AND #$00FF STA $A1 CLC ADC $F9 STA $A3 LDX $A1 LDY $A3 JSR Copy_SCB_Tail LDX $C1 LDY $A1 JSR SHGR_Offset_for_X_Y JSR LEB2D LDA $9F SEC SBC #$0080 CMP #LDE07 BCS LE6BF LDA #LDE07 LE6BF STA $A9 JSR LE74A LDA $B1 CLC ADC #$0005 STA $B1 LE6CC SEC SBC #$001E BCC LE6E0 STA $B1 LDA $B5 CLC ADC #$0005 STA $B5 LDA $B1 BRA LE6CC LE6E0 LDA $B5 CLC ADC $AF PHA AND #$00FF STA $AF PLA XBA AND #$00FF ASL ASL CLC ADC $9F STA $9F CMP #Init_Intro_Graphics BCC LE705 LDA $9F STA $A9 JSR LE74A INC $B9 LE705 RTS LE706 LDA ($AB) AND #$00FF LSR STA $9B LDY #$0005 LDA ($AB),Y AND #$00FF STA $9D LDY #$0001 LDA ($AB),Y AND #$00FF CMP $9D BCC LE72D BEQ LE748 INY CLC ADC ($AB),Y AND #$00FF LE72D CMP $A3 BCS LE735 CMP $A1 BCS LE748 LE735 PHA TAY LDX $9B JSR SHGR_Offset_for_X_Y LDA #$00A0 LE73F SEC SBC $9B SBC $9B TAX PLA CLC RTS LE748 SEC RTS LE74A LDA $A5 LE74C STA $AB CMP $A9 BCS LE773 JSR LE706 BCS LE76B PHA LDA #$0000 JSR Fill_Bank_E1_with_Byte PLX SEP #$20 NOP LDA #$00 STAL $E19D00,X REP #$20 NOP LE76B LDA $AB CLC ADC #$0004 BRA LE74C LE773 STA $A5 STZ $AD LE777 STA $AB CMP $A7 BCS LE79C JSR LE706 BCS LE792 TAX LDY $AD SEP #$20 NOP LDA LE7C6,Y STAL $E19D00,X REP #$20 NOP LE792 INC $AD LDA $AB CLC ADC #$0004 BRA LE777 LE79C STA $AB CMP $9F BCS LE7C3 JSR LE706 BCS LE7BB PHA LDA #$00FF JSR Fill_Bank_E1_with_Byte PLX SEP #$20 NOP LDA #$0F STAL $E19D00,X REP #$20 NOP LE7BB LDA $AB CLC LE7BE ADC #$0004 BRA LE79C LE7C3 STA $A7 RTS LE7C6 HEX 01010101010202020203030304040405 HEX 050506060607070808090A0B0C0D0E0F LE7E6 LDA $BB BNE LE819 LDA $BD CMP #$1F54 BCC LE818 JSR Load_Palettes LDX #$005C LDY #$006E JSR Copy_SCB_Tail LDA #$FFFF STA $A9 LDA #$0012 STA $9F LDA #$0001 STA $BF LDA #$0001 STA $AD LDA #$0002 STA $C9 INC $BB LE818 RTS LE819 CMP #$0001 BNE LE832 JSR LE88D BCC LE825 INC $BF LE825 JSR LE881 LDA $BF CMP #$002E BCC LE831 INC $BB LE831 RTS LE832 CMP #$0002 BNE LE84F JSR LE88D BCC LE840 DEC $9F INC $BF LE840 JSR LE881 LDA $9F CMP #$FFEE BNE LE84E INC $BB STZ $A9 LE84E RTS LE84F CMP #$0003 BNE LE86C JSR LE88D BCC LE85D INC $9F DEC $BF LE85D JSR LE881 LDA $9F BNE LE86B INC $BB LDA #$005A STA $AB LE86B RTS LE86C CMP #$0004 BNE LE880 JSR LE881 JSR LE88D BCC LE87F DEC $AB BNE LE87F INC $BB LE87F RTS LE880 RTS LE881 LDX $BF LDY #$005C JSR SHGR_Offset_for_X_Y JSR LE89A RTS LE88D DEC $C9 BNE LE898 LDA #$0002 STA $C9 SEC RTS LE898 CLC RTS LE89A PHB LDY #$005C LDX #$0000 JSR SHGR_Offset_for_X_Y LDA #$E1E1 PHA PLB PLB LDA $9F BPL LE8B2 EOR #$FFFF INC LE8B2 STA $A3 LDA $BF STA $A5 STZ $A1 LDA #$0081 SEC SBC $BF STA $A7 LDX #$29D8 LE8C5 JSR LE911 LDA $A9 BEQ LE8D1 DEY STA |$0000,Y INY LE8D1 LDA #$001E MVN $E10000,$E10000 LDA #$0000 STA |$0000,Y TYA CLC ADC $A7 TAY LDA $A1 CLC ADC $A3 CMP #$0012 BCC LE8EF SBC #$0012 LE8EF STA $A1 BCC LE901 LDA $9F BPL LE8FD DEC $A5 INC $A7 BRA LE901 LE8FD INC $A5 DEC $A7 LE901 CPX #$2C06 BCC LE8C5 PLB DEC $AD BPL LE910 LDA #$000C STA $AD LE910 RTS LE911 LDA $AD BNE LE939 TYA CLC ADC $A5 STA $9B SEP #$20 NOP LE91E LDA |$0000,Y CMP #$88 BCC LE930 BNE LE92B LDA #$00 BRA LE92D LE92B SBC #$11 LE92D STA |$0000,Y LE930 INY CPY $9B BCC LE91E REP #$20 NOP RTS LE939 TYA CLC LE93B ADC $A5 TAY RTS LE93F JSR Check_Key BCC LE945 RTS LE945 JSR Setup_Palette_12 LDA #$00FF STA $9F TAY JSR LEA9F BRA LE989 LE953 LDY $9F JSR LEA9F JSR LEA35 SEP #$20 NOP LDX $B5 LDA #$0C STAL $E19D00,X REP #$20 NOP LDY $C1 LDX $F7 JSR LE3E4 LDA $B7 CLC ADC $FD TAX SEP #$20 NOP LDA #$0C STAL $E19D00,X REP #$20 NOP LDY $C3 LDX $FB JSR LE3E4 LE989 LDA $AD STA $F7 LDA $AF STA $F9 LDX $A9 STX $B1 LDY $AB STY $B5 JSR SHGR_Offset_for_X_Y STY $C1 JSR LEB2D LDA $A5 STA $FB LDA $A7 STA $FD LDX $A1 STX $B3 LDY $A3 STY $B7 JSR SHGR_Offset_for_X_Y STY $BF JSR LEB4D STY $C3 JSR Check_Key BCS LE9D0 LDA $9F SEC SBC #$000C STA $9F BCS LE953 JSR LE9DE JSR LE9D1 LE9D0 RTS LE9D1 LDY #$0514 LE9D4 LDX #$0320 LE9D7 DEX BNE LE9D7 DEY BNE LE9D4 RTS LE9DE LDA #$0045 PHA LDA #$005C CLC ADC #$0012 PHA LE9EA LDA $03,S TAY LDX #$0000 JSR SHGR_Offset_for_X_Y LDX #$00A0 LDA #$0000 JSR Fill_Bank_E1_with_Byte LDA $01,S TAY LDX #$0000 JSR SHGR_Offset_for_X_Y LDX #$00A0 LDA #$0000 JSR Fill_Bank_E1_with_Byte JSR Delay_YYY JSR Check_Key BCS LEA25 LDA $03,S INC STA $03,S LDA $01,S DEC STA $01,S CMP #$0059 BCS LE9EA LEA25 PLA PLA RTS Delay_YYY LDY #$0032 :outer LDX #$00C8 :inner DEX BNE :inner DEY BNE :outer RTS LEA35 LDY $C1 LDA $A9 SEC SBC $B1 BCC LEA48 BEQ LEA48 TAX LDA $F9 BEQ LEA48 JSR LE3B6 LEA48 LDA $F7 SEC SBC $AD BCC LEA6A SBC $A9 CLC ADC $B1 BEQ LEA6A BMI LEA6A PHA LDA $C1 CLC ADC $F7 SEC SBC $01,S TAY PLX LDA $F9 BEQ LEA6A JSR LE3B6 LEA6A LDY $BF LDA $A1 SEC SBC $B3 BCC LEA7D BEQ LEA7D TAX LDA $FD BEQ LEA7D JSR LE3B6 LEA7D LDA $FB SEC SBC $A5 BCC LEA9E SBC $A1 ADC $B3 BEQ LEA9E BMI LEA9E PHA LDA $BF CLC LEA90 ADC $FB SEC SBC $01,S TAY PLX LDA $FD BEQ LEA9E JSR LE3B6 LEA9E RTS LEA9F LDA #$008C JSR LEB12 STA $AD LDA #$0002 JSR LEB12 EOR #$FFFF SEC ADC #$0059 STA $AF LDA #$0014 JSR LEB12 EOR #$FFFF SEC ADC #$0059 STA $AB LDA $AF SEC SBC $AB STA $AF LDA #$0046 JSR LEB12 EOR #$FFFF SEC ADC #$0050 STA $A9 LDA #$001F JSR LEB12 STA $A5 LDA #$0015 JSR LEB12 CLC ADC #$0059 STA $A7 LDA #$0003 JSR LEB12 CLC ADC #$0059 STA $A3 LDA $A7 SEC SBC $A3 STA $A7 LDA #$0010 JSR LEB12 EOR #$FFFF SEC LEB0C ADC #$0050 STA $A1 RTS LEB12 SEP #$30 NOP STY $C5 STA $C7 LDX #$08 TYA LEB1C LSR $C7 BCC LEB22 ADC $C5 LEB22 ROR DEX BNE LEB1C REP #$30 NOP AND #$00FF RTS LEB2D LDA $F7 STA Display_Width BEQ :done LDA $F9 STA Display_Height BEQ :done LDA #$008C STA Image_Width LDA #$0012 STA Image_Height LDA #$2000 STA Image_Ptr JSL $000203 :done RTS LEB4D LDA $FB STA Display_Width BEQ LEB6C LDA $FD STA Display_Height BEQ LEB6C LDA #$001F STA Image_Width LDA #$0012 STA Image_Height LDA #$29D8 STA Image_Ptr JSL $000203 LEB6C RTS LEB6D JSR Check_Key BCS LEBB1 JSR Clear_Palette_12 LDX #$0082 LDY #$00C7 LDA #$000C JSR Set_SCBs_to_Pal JSR LED00 LDX #About_Hardware LDY #$0082 LDA #$0011 JSR LE552 JSR LEC58 JSR Delay_Check_Key BCS LEBB1 LDY #About_Hardware LDX #$EEB7 JSR LEC06 BCS LEBB1 LDX #About_Layout JSR LEBE9 BCS LEBB1 LDX #About_Firmware JSR LEC06 LEBB1 BCS LEBE5 LDX #About_Firmware LDY #$0082 LDA #$0022 JSR LE552 LEBBF LDX #About_AE LDY #$00A5 JSR LE57D JSR LECA8 JSR Delay_Check_Key BCS LEBE5 LDX #About_AE LDY #$00A5 JSR LE57D LDX #$0082 LDY #$00C7 LDA #$0000 JSR Set_SCBs_to_Pal LEBE5 JSR Clear_Palette_12 RTS LEBE9 PHX PHY LDY #$0082 LDA #$0011 JSR LE552 JSR LEC58 PLX LDY #$0082 LDA #$0022 JSR LE552 JSR Delay_Check_Key PLY RTS LEC06 PHX PHY LDY #$0082 LDA #$0022 JSR LE552 JSR LEC80 PLX LDY #$0082 LDA #$0011 JSR LE552 JSR Delay_Check_Key PLY RTS Clear_Palette_12 LDX #16*2*12 ; #$0180 = palette 12 LDA #$0000 :clear_loop STAL $E19E00,X INX INX CPX #16*2*13 ; #$01A0 = palette 13 BCC :clear_loop RTS Delay_Check_Key JSR Check_Key BCS :done LDA #$001E :loop JSR Delay_XXX PHA JSR Check_Key PLA BCS :done DEC BNE :loop :done RTS * ~1sec delay @ 7MHz Delay_XXX LDX #$00FA ; 250 :outer LDY #$00C8 ; 200 :inner DEY BNE :inner DEX BNE :outer RTS LEC58 LDA #$0FFF STA $9B LDA #$0000 STA $9D :loop JSR Delay_XXX LDA $9D STAL $E19F82 CLC ADC #$0111 STA $9D LDA $9B STAL $E19F84 SEC SBC #$0111 STA $9B BCS :loop RTS LEC80 LDA #$0FFF STA $9B LDA #$0000 STA $9D LEC8A JSR Delay_XXX LDA $9D STAL $E19F84 CLC ADC #$0111 STA $9D LDA $9B STAL $E19F82 SEC SBC #$0111 STA $9B BCS LEC8A RTS LECA8 LDA #$0000 STA $9B LDA #$0000 STA $9D LECB2 JSR Delay_XXX LDA $9D LSR STAL $E19F88 LDA $9D CLC ADC #$0001 STA $9D LDA $9B STAL $E19F8E CLC ADC #$0111 STA $9B CMP #$1000 BCC LECB2 RTS LECD6 LDA #$000F STA $9D LDA #$0FFF STA $9B LECE0 JSR Delay_XXX LDA $9D LSR STAL $E19F88 LDA $9D SEC SBC #$0001 STA $9D LDA $9B STAL $E19F8E SBC #$0111 STA $9B BCS LECE0 RTS LED00 LDA #$0FFF STAL $E19F86 RTS LED08 LDA #$0000 STAL $E19F86 RTS *----------- About_Hardware HEX 6319020FC0890005040020001F840001 HEX E08200040E003FF0890005060060001F HEX 840001E08200020E0082780138880005 HEX 0700E00007840001E08200030E007082 HEX 388800050781E00007840001E0820037 HEX 0E007001FF81F8700E0FC1DF0007C3E0 HEX FF8701F807E0EF807E0E0F7C01FF87FE HEX 700E3FF1FFC007E7E3FF8707FE1FF8FF HEX E1FF8E1E3FC038820F0B381C7879E1E0 HEX 07FFE78387820F823C38F0F3C3CE3C0F HEX F0380E07381C7039C0E0077EE703870E HEX 07381CE07381CE7800F8380FFF1C387F HEX F9C0E0073CE703870FFF3800E073FFCF HEX F0008238170FFF1C387FF9C0E00718E7 HEX 03870FFF3800E073FFCFF0708238030E HEX 000E82701001C0E00700E703870E0038 HEX 1CE073800E83780C3C0F0706607839C0 HEX E00700E78287020F07823C31E073C1CE HEX 3C3FF01F87FE07E03FF1C0E00700E3FF HEX 9FC7FE1FF8E071FF8E1E0FC00F81FC03 HEX C00FE1C0E00700E0FB9FC1FC0782E004 HEX 707F0E0FFF0086000203308200016094 HEX 00020330820001609400090331F363EC HEX 31F363C090000903F333866DB3338660 HEX 90000103823306066DB33307E0900001 HEX 0382330506666333069100090331F303 HEX E661F303C08800 About_LCA HEX 4B1A02FF80870005380F070007850002 HEX FFE0870005381E070007850002E0F087 HEX 0002383C82000107850002E070870002 HEX 38788200010785002BE0707E01F707E0 HEX E3C038F03F01F70FC07E0EF8E071FF87 HEX FF1FF8EFC039E03F07FF1FE1FF8FFEE0 HEX F3C3CF0F823C05FC003FC007820F5D38 HEX 63C3CF0FFFE381CE07381CF8003FC007 HEX 0E07380381CE07FF8381CE073FFCF000 HEX 39E0070E071FC381CE07E3C381CE073F HEX FCF00038F0070E070FE381CE07E1E381 HEX CF0F3800E0003878070E07007381CE07 HEX E0F3C3C7FF3C1CE000383C07820F2B30 HEX 73C3CE07E079FF81F71FF8E000381E3F HEX E7FF3FE1FF8E07E0387E040E07F0E000 HEX 380F3FE1F71FC07E0E0783000207FC91 HEX 000203F8CB0002018082F0011F820001 HEX 0C8B00060181999819808D0001018281 HEX 0798198F0F1C3E7C8900010182810598 HEX 1999980C826689000101828105F8199F HEX 8F0C826689000A018199981998018C3E HEX 6689000501F8F1981F820F031E466691 HEX 00013C8600 About_Layout HEX 501A0270388900031C71C08400047000 HEX 1C0E890003071C708400051C00070380 HEX 88000301C71C840005070001C0E08900 HEX 0271C784007101C00070383FE71E700E HEX 0FC1C0E01C71C1F83BE01F707E1C0E3F HEX F9DF9C038FFC7038071C71FF8FFE1FFC HEX 7FE7FF9E0E7E0381C7879C0E01C71CF0 HEX F3C3CF0F3C3DFFE7039F00E071C0E703 HEX 8071C7381CE07381CE077039C0E7801C HEX 387FF9C0E01C71CFFF381CE073FFDC0E HEX 7039E0070E1FFE827825071C73FFCE07 HEX 381CFFF7039C0E7000E707000FFE01C7 HEX 1CE00381CE073801C0E7879C00198182 HEX E02FFB807BEF3C1CE073C3CF077038FF HEX E70007E03FF000E00FDF87FE381C7FF1 HEX FF9C0E0FB9C000F003F8207001E3C07F HEX 0E820703DC1FC08800020FF892000201 HEX FCCE0001C093000130840001188E0007 HEX 0C07CCC78CCF808D0082038333023180 HEX 8E0003C0CCDC82CC01608E000330331B HEX 8233011B8E00070FC7C8C787C3808F00 HEX 0201E08A00 About_Firmware HEX 4D1904003800078400013F8500010E85 HEX 0004038000708300020FFC850001E085 HEX 00033800078300010182E101C0830001 HEX 0E850004038000708300031C0E1C8400 HEX 01E0850036383F077C1DF001C00FFC1F HEX 83BE0EF807E0EF80038FFC7FF1FFC01F HEX 00FFC7FE3FF8FFE1FF8FFE0039E1E787 HEX 9E1E00FF01C0F0F3C3CF0F823C82F055 HEX 039C0E7039C0E003FC1C0E07381CE073 HEX 81CE070039C0E7039C0E0003E1C0FFF3 HEX 81CE073FFCE077039C0E7039C0E0000E HEX 1C0FFF381CE073FFCE077039C0E7039C HEX 0E01C0E1C0E00381CE073800E077879E HEX 1E7039C0E0831E020F07823C26E073C1 HEX CE073FF0FFC7039C0E00FFC0FC7FE3FF HEX 8E071FF8E071FE03F07039C0E003F007 HEX C1FC3B82E004707F0E078C0002038092 HEX 000138C6000301F18091000118920009 HEX 01838DBF9863E6C7808B00081E18E36D HEX B66670CC8B000501818C36DB8266020F HEX C08B00821806C36CCC6660C08B000901 HEX 83CC36CCC3E607808500831C89000203 HEX F09600013C84000260038200830C831E HEX 0901E00001C18000C0F8820001C08300 HEX 01068200016685000603018019E63C83 HEX 33020330820001C0820082C089000C60 HEX 3C7C666CE1F3E3E01B360C8333050333 HEX E3E0C3828705C0C1F0F9C782C305C6CE HEX 3E1F6083660970633331801B060C3382 HEX 1E010382330930C18CCCC0F19998C682 HEX 660267068233016082660A6E60633331 HEX 801B360C1F82331003F33330C18FCCC0 HEX C19998C667E7E606823383660A366061 HEX F331B019E60C038233010382330A30C1 HEX 8C0CC0C198F8C666830602331F823C07 HEX 7C4660F23330E0820C013F831E120333 HEX E3E1E3C787C0F99919E663C3C60F3323 HEX 820005603C0001E082000203F0850082 HEX 03870001F08600011EC2000403C00380 HEX 8200050603C001C08400010684001163 HEX C18606078C03000783C783C006600180 HEX 8200040C018003840001068400170186 HEX 6786618CCCCF000C04CC04C00603E183 HEX C3C018018782C7078DBF87CF8E1E3E82 HEX 031D00618660C0CCC3000F8CCF8CC003 HEX C661866600300186630CCE36CCC60682 HEX 330A000300C18660C18CC30F84CC11C0 HEX 00666187E3C0600186630CCC36CCC606 HEX 82330B0003018187E0C30FC3000C83CC HEX 0FC0066661860060C00186630CCC36CC HEX 82C68233010082030F018060C600C300 HEX 0CCC8CCC8003C3E382C31BC08003C663 HEX 078C36C7C38F1E33030187E7E0618FC0 HEX CFC0078F078F9500016082000106CD00 HEX 017E820003600030820002E00F88000D HEX 63C18606078C03000783C78780820001 HEX 18820001608400036019808400101800 HEX 01866786618CCCCF000C04CC0CC08200 HEX 0118823C827C0B70F0F86018199F1F0F HEX 1B3E82030D00618660C0CCC3000F8CCF HEX 8CC082000118846606319998600F1983 HEX 990C9C18000300C18660C18CC30F84CC HEX 01C0820003187E608266053181986001 HEX 84990D98180003018187E0C30FC3000C HEX 82CC02C7C08200021860836605319998 HEX 6019849903981B0082030A018060C600 HEX C3000CCC8C82C082000118823C826604 HEX 78F0F8F0820F149F1F0F180E030187E7 HEX E0618FC0CFC0078F0787808D00821885 HEX 000160820001068900 About_AE HEX 12168A00010787778B00017486440147 HEX 8A000107874402477789000174874482 HEX 47880001078344014785770147880001 HEX 74834401478544014787000107824402 HEX 47448247857787000174824402774482 HEX 478B0001078244824702444784778800 HEX 01748244027447854401478700010782 HEX 44034744478544024777860001748244 HEX 03744477854482478500010782440147 HEX 83770244478477014785000174874401 HEX 47844401478400010788448247847784 HEX 00017488448247870001078244014785 HEX 77024447857783000174824401748444 HEX 01478644014782000107824403474447 HEX 84778644044777007482440374447083 HEX 00010786448247010783770244478400 HEX 01078777014782000174824401708500 HEX 01078644034700078377860001078777 *----------- CDA_Shutdown RTL ; CDA CDA_Startup PHP PHD PHB PEA $0000 PLD PHK PLB SEP #$30 NOP JSR NVRAM_Validate REP #$30 NOP LF6FD LDA #$0007 STA $5B JSR Text_Init LDX #$0001 LDY #$0017 JSR Text_Offset_For_X_Y LDA #$004C LDY #$0026 JSR Text_Repeat_Char_Horiz LDX #$0000 LDY #$0001 JSR Text_Offset_For_X_Y LDA #$005A LDY #$0016 JSR Text_Repeat_Char_Vertical LDX #$0027 LDY #$0001 JSR Text_Offset_For_X_Y LDA #$005F LDY #$0016 JSR Text_Repeat_Char_Vertical LF73B JSR Text_Clear_Window_from_3 LDX #Menu_Options SEC JSR LA06E JSR STROUT_SelectJK LF748 JSR STROUT_Open JSR Display_Version_Info LF74E JSR Set_No_Items_Selected LDX #$0004 LDY #$0003 LF757 JSR Text_Offset_For_X_Y LDX #LF7E9 LDY $5B JSR Display_Menu_Items LF762 JSR Menu_Input_Select BCC LF762 CPY #$0000 BNE LF773 LDA #$0007 STA $5B BRA LF74E LF773 CPY #$0007 BEQ LF78C LDA $5B PHA JSR LF79C PLA STA $5B SEP #$30 NOP JSR Config_to_TW_MODE REP #$30 NOP BRA LF73B LF78C SEP #$30 NOP JSR NVRAM_Save JSR Config_to_TW_MODE REP #$30 NOP PLB PLD PLP RTL LF79C CPY #$0001 BNE LF7AB LF7A1 LDX #LF856 JSR Display_Selected_Menu JSR LA190 RTS LF7AB CPY #$0002 BNE LF7BA LDX #LF85E JSR Display_Selected_Menu JSR Configuration_Menu RTS LF7BA CPY #$0003 BNE LF7CA LDX #LF86A JSR Display_Selected_Menu CLC JSR LA318 RTS LF7CA CPY #$0004 BNE LF7DA LDX #LF87C JSR Display_Selected_Menu SEC JSR LA318 RTS LF7DA CPY #$0005 BNE LF7E8 LDX #LF893 JSR Display_Selected_Menu JSR About_Transwarp_GS LF7E8 RTS LF7E9 STR "Speed" BRK $00 LF7F1 STR "Configure" BRK $00 LF7FD STR "Quick Self-Test" BRK $00 LF80F STR "Continuous Self-Test" BRK $00 LF826 STR "About TransWarp GS" BRK $00 LF83B STR " " BRK $00 LF83F STR "Quit" DB $00 DB $00 DB $00 Menu_Options DW $0000 STR "TransWarp GS" LF856 DW $0002 STR "Speed" LF85E DW $0002 STR "Configure" LF86A DW $0002 STR "Quick Self-Test" LF87C DW $0002 STR "Continuous Self-Test" LF893 DW $0002 STR "About TransWarp GS..." Display_Selected_Menu PHX JSR Text_Clear_Window_from_3 LDX #Menu_Options CLC JSR LA06E PLX SEC JSR LA06E RTS Display_Version_Info LDX #$0007 LDY #$0011 JSR Text_Offset_For_X_Y LDX #String_TW_Version JSR Text_Out_Pascal_String LDX #$000E LDY #$0012 JSR Text_Offset_For_X_Y LDX #String_TW_Revision JSR Text_Out_Pascal_String LDX #$0009 LDY #$0013 JSR Text_Offset_For_X_Y LDX #String_TW_Copyright JSR Text_Out_Pascal_String LDX #$000A LDY #$0014 JSR Text_Offset_For_X_Y LDX #String_AE JSR Text_Out_Pascal_String RTS String_TW_Version STR "TransWarp GS version 8/32S" String_TW_Revision STR "Revision 1.8S" String_TW_Copyright STR "Copyright (c) 1989-1991" String_AE STR "Applied Engineering" MX %10 LF94F REP #$10 NOP LDX #$1770 LF955 DEX BEQ LF963 LDAL $E0C026 LDAL $E0C027 ROR BCS LF955 LF963 LDX #$1D4C LDA #$07 STAL $E0C026 LF96C DEX BEQ LF99B LDAL $E0C026 LDAL $E0C027 ROR LF978 BCS LF96C LDA #$0C JSR LF99F LF97F LDA #$32 JSR LF99F LDA #$00 JSR LF99F LDA #$00 JSR LF99F LDA #$FF SEC LF991 PHA LF992 SBC #$01 BNE LF992 PLA SBC #$01 BNE LF991 LF99B SEP #$10 NOP RTS LF99F REP #$10 NOP STAL $E0C026 LDX #$1D4C LF9A9 DEX BEQ LF9B3 LDAL $E0C027 LSR BCS LF9A9 LF9B3 SEP #$10 NOP RTS LF9B7 REP #$10 NOP LDX #$1D4C SEC LF9BE DEX BEQ LF9CE LDAL $E0C027 AND #$20 BEQ LF9BE CLC LDAL $E0C026 LF9CE SEP #$10 NOP RTS LF9D2 LDAL $E0C027 PHA LDA #$00 STAL $E0C027 JSR LF94F LDA #$09 JSR LF99F BCS LFA01 LDA #$51 JSR LF99F BCS LFA01 LDA #$00 JSR LF99F BCS LFA01 JSR LF9B7 BCS LFA01 CMP #$A5 BEQ LFA01 SEC BRA LFA02 LFA01 CLC LFA02 PLA STAL $E0C027 RTS LFA08 LDAL $E0C027 PHA LDA #$00 STAL $E0C027 JSR LF94F LDA #$08 JSR LF99F BCS LFA29 LDA #$51 JSR LF99F BCS LFA29 LDA #$00 JSR LF99F LFA29 PLA STAL $E0C027 RTS LFA2F REP #$20 NOP PHB PHA PHA LDA $06,S STA $03,S LFA39 LDA $08,S STA $05,S LDA #>LFA5D-1 ; #$BCFA STA $08,S LDA #LFA5D-1 STA $07,S LDAL LFB24 LDAL LFB24+2 LDAL LFFEA LDAL LFFEA+2 PLA RTI LFA59 JMPL LFA59 LFA5D PHP REP #$30 NOP PHA PHX PHY PHB LDX #$0000 LDY #$9F00 LDA #$00FF MVN $000000,$E10000 PLB JSR LFA88 PHB LDX #$9F00 LDY #$0000 LDA #$00FF MVN $E10000,$000000 PLB PLY PLX PLA PLP RTL LFA88 PEA ^CDA_Ptr32 ; $00BC PEA CDA_Ptr32 _InstallCDA RTS CDA_Ptr32 ADRL CDA_Install_Hdr MX %11 LFA9A LDX #$FF TXS CLC XCE JSR LF94F LDAL $E0C062 BMI LFB07 JSR FPGA_Init_Readback BCC LFAB0 JSR FPGA_Check_Readback LFAB0 LDA #$00 STAL $E0C02D LDAL $E0C0C8 LFABA LDAL $E0C0D8 LDAL $E0C0E8 LDAL $E0C0F8 LFAC6 JSR NVRAM_Active_Check BCC LFAF7 LDAL $E0C062 BMI LFB07 REP #$10 NOP JSR Clear_Text_Pages_E0_E1 SEP #$10 NOP JSR L9757 LFADD JSR LFA08 JSR NVRAM_Validate JSR Play_Startup_Intro REP #$30 NOP JSR Time_Active_Screen LFAEC JSR LA8CB LDA $00 JSR NVRAM_Write_Speed SEP #$30 NOP LFAF7 REP #$30 NOP JSL Flush_Cache_L LFAFE SEP #$30 NOP JSR CONFIG_TW_From_NVRAM JSR Cache_ON LFB07 SEC XCE LDA #$00 PHA ; LDAL LFFFC ; suspicious1 ldal $00FFFC CMP #$01 ; LDAL LFFFC+1 ; suspicious2 ldal $00FFFD SBC #$00 PHA ; LDAL LFFFC ldal $00FFFC DEC PHA RTL LFB20 JMPL LFA9A LFB24 JMPL LFA2F MX %00 Version_Info_L LDA #$0000 LDX #$0108 RTL Reset_HW_Config_L JSR CONFIG_TW_From_NVRAM JSR Cache_ON RTL LFB36 RTL Get_NVRAM_Speed_L JSR NVRAM_Read_Speed RTL Get_Speed_Setting_Index_L LDX #$0003 ; I believe the 3 is a speed setting (GB has GetNumISpeed) RTL Get_CPU_Frequency_L LDA #$0000 CPX #$0003 BCS :exit CPX #$0002 BCC :get_from_table PHX JSR NVRAM_Read_Speed PLX RTL :get_from_table PHX TXA ASL TAX LDAL _frequencyTable,X PLX :exit RTL _frequencyTable DW $0400 ; 1.024 DW $0A28 ; 2.600 DW $1B58 ; 7.000 Get_CPU_Frequency_Diff_L PHA LDX #$0000 :loop JSL Get_CPU_Frequency_L CMP $01,S BCS :found_it INX CPX #$0003 BCC :loop DEX :found_it JSL Get_CPU_Frequency_L SEC SBC $01,S STA $01,S PLA RTL Set_TW_Speed_L SEP #$20 NOP CPX #$0000 BEQ :gs_1mhz JSR GS_FAST CPX #$0001 BEQ :no_accel :accel JSR TWGS_ON BRA :done :no_accel JSR TWGS_OFF BRA :done :gs_1mhz JSR GS_1MHZ JSR TWGS_OFF :done REP #$20 NOP RTL Get_TW_Speed_L SEP #$20 NOP LDAL CYAREG BPL :off LDAL TWGS_Control AND #$04 BEQ :zero LDX #$0002 BRA :done :zero LDX #$0001 BRA :done :off LDX #$0000 :done REP #$20 NOP RTL Get_Speed_and_Frequency_L JSL Get_TW_Speed_L ; in X JSL Get_CPU_Frequency_L ; in M RTL LFBCF JSR Time_Active_Screen JSR LA8CB LDA $00 RTL Set_Speed_From_Frequency_L JSL Get_CPU_Frequency_Diff_L PHA LFBDD JSL Set_TW_Speed_L PLA RTL Flush_Cache_L PHB JSR Check_Cache_Size DEC LDX #$8000 LDY #$8000 LFBEE MVN TWGS_Control,TWGS_Control PLB RTL IRQ_Logic_OFF_L JSR IRQ_Logic_OFF RTL IRQ_Logic_ON_L JSR IRQ_Logic_ON LFBFA RTL Cache_ON_L JSR Cache_ON RTL Cache_OFF_L JSR Cache_OFF RTL Get_TW_Mode_L JSR READ_TW_MODE RTL Set_TW_Mode_L JSR SET_TW_MODE_KEEP_CACHE RTL Get_Cache_Size_L JSR Check_Cache_Size LDX #$000A LFC11 LSR DEX BNE LFC11 RTL Filler DS $EA DS $100 DS $100 TranswarpId ASC 'TWGS' ; happens to be at $FF00 TranswarpId2 ASC 'SMJS' ; not really sure JMPL Version_Info_L JMPL Reset_HW_Config_L JMPL Get_NVRAM_Speed_L ; get "max" speed? JMPL Get_Speed_Setting_Index_L JMPL Get_CPU_Frequency_Diff_L JMPL Get_CPU_Frequency_L JMPL Get_Speed_and_Frequency_L JMPL Set_Speed_From_Frequency_L JMPL Get_TW_Speed_L JMPL Set_TW_Speed_L JMPL Flush_Cache_L JMPL IRQ_Logic_OFF_L JMPL IRQ_Logic_ON_L JMPL Get_TW_Mode_L JMPL Set_TW_Mode_L JMPL Get_Cache_Size_L JMPL Cache_ON_L JMPL Cache_OFF_L JMPL Run_Diagnostic_Tests JMPL TWGS_Failed JMPL LFBCF Filler2 ds 142 ; hand adjust as I cent get ds working with math/pointers LFFEA DA LFB24 ; NMI Vector DA LFA59 LFFEE DA LFA59 DA LFA59 DA LFA59 DA LFA59 DA LFA59 DA LFA59 DA LFA59 LFFFC DA LFB20 ; Reset Vector LFFFE DA LFA59