[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

ROM 03 Easter Egg Hunt



I found the easter egg code which shouts "Apple II !!!" when ctl-oa-ca-n pressed. The subroutine @33 is called in the 'check startup device' loop and if the magic combo is pressed a jsl to FE0018 is taken which branches to $FE07C6. The wav tables are blocks at $FF1000 and FF1D00. I'm filling in the gaps on the $FF firmware bank. No more mystery !!! Larry

FA5DA A5DA 00FFA5DA               	@33		EQU	*
FA5DA A5DA AD C000             4  			LDA	KBD	;If ctrl pressed do test
FA5DD A5DD 8D C010             4  			STA	KBDSTRB	;
FA5E0 A5E0 C9 8E               2  			CMP	#$8E	;Control-'N'
FA5E2 A5E2 D0 0D         FA5F1 2  			BNE	@34	;
FA5E4 A5E4 AD C062             4  			LDA	BUTN1	;If closed apple down test open apple
FA5E7 A5E7 10 08         FA5F1 2  			BPL	@34	;
FA5E9 A5E9 AD C061             4  			LDA	BUTN0	;If open apple down too
FA5EC A5EC 10 03         FA5F1 2  			BPL	@34	;
FA5EE A5EE 20 FFFF       FA5FC 6  			JSR	@40	;Do tests
FA5F1 A5F1 00FFA5F1               	@34		EQU	*
FA5F1 A5F1 AD C019             4  			LDA	RDVBLBAR	;Wait if in VBL

FA5F4 A5F4 10 FB         FA5F1 2  			BPL	@34	;
FA5F6 A5F6 00FFA5F6               	@32		EQU	*
FA5F6 A5F6 AD C019             4  			LDA	RDVBLBAR	;Wait if not in VBL
FA5F9 A5F9 30 FB         FA5F6 2  			BMI	@32	;
FA5FB A5FB 60                  6  			RTS		;
FA5FC A5FC
FA5FC A5FC
FA5FC A5FC 00FFA5FC               	@40		EQU	*	;Do tests
FA5FC A5FC 5A                  3  			PHY		;MUST preserve pointer around call
FA5FD A5FD 20 FFFF       FA9EE 6  			JSR	HOMEFF	;Clear the specific screen first
FA600 A600 A9 06               2  			LDA	#6	;Position for messages
FA602 A602 85 25               3  			STA	CV	;
FA604 A604 64 24               3  			STZ	CH	;
FA606 A606 20 FFFF       FA9E4 6  			JSR	VTABFF	;
FA609 A609 22 FE0018           8  			JSL	>$FE0018	;{MSA 4/20/89} A touch of audio makes it
FA60D A60D A9 F3               2  			LDA	#N1	;Pointer number
FA60F A60F 20 FFFF       FA624 6  			JSR	@60	;Make a delay
FA612 A612 A9 0F               2  			LDA	#15	;Position the message
FA614 A614 85 25               3  			STA	CV	;
FA616 A616 A9 02               2  			LDA	#2
FA618 A618 85 24               3  			STA	CH	;
FA61A A61A 20 FFFF       FA9E4 6  			JSR	VTABFF	;
FA61D A61D A9 F4               2  			LDA	#N2	;Pointer number
FA61F A61F 20 FFFF       FA624 6  			JSR	@60	;Print / delay /clear
FA622 A622 7A                  4  			PLY		;Restore y
FA623 A623 60                  6  			RTS		;

$FE0018 jumps here:

007C6 0000 00FF1000               	Sound1	equ $FF1000
007C6 0000 00FF1D00               	Sound2	equ $FF1D00
007C6 0000
007C6 0000 08                  3  		php
007C7 0001 C2 30               3  		rep #$30
007C9 0003
007C9 0003
007C9 0003 F4 0000             5  		pea 0
007CC 0006                        		_SoundToolStatus
007CC 0006 A2 0608             3 1	     ldx #$0608
007CF 0009 22 E10000           8 1	     jsl $E10000
007D3 000D 68                  5  		pla
007D4 000E D0 0C         007E2 2  		bne @StartedAlready
007D6 0010
007D6 0010 F4 2000             5  		pea $2000
007D9 0013                        		_SoundStartup
007D9 0013 A2 0208             3 1	     ldx #$0208
007DC 0016 22 E10000           8 1	     jsl $E10000
007E0 001A B0 28         0080A 2  		bcs @Error
007E2 001C                        	@StartedAlready
007E2 001C                        	; Now play the sound!
007E2 001C                        	@Again
007E2 001C F4 7FFF             5  		pea #$7FFF
007E5 001F                        		_FFStopSound
007E5 001F A2 0F08             3 1	     ldx #$0F08
007E8 0022 22 E10000           8 1	     jsl $E10000
007EC 0026
007EC 0026 E2 20               3  		sep #$20	; crank the volume a little!
007EE 0028                        		Longa Off
007EE 0028 AF E100CA           5  		lda >$E100CA
007F2 002C 09 08               2  		ora #$08
007F4 002E 8F E100CA           5  		sta >$E100CA
007F8 0032 C2 20               3  		rep #$20
007FA 0034                        		Longa On
007FA 0034
007FA 0034 F4 0001             5  		pea 1
007FD 0037                        		PushLong #MyPBlock
007FD 0037                       1		IF &addr[1:1]='#' THEN
007FD 0037 F4 FFFF             5 1			pea		MyPBlock>>16
00800 003A F4 FFFF       0080C 5 1			pea		|MyPBlock
00803 003D                       1		ELSEIF &addr[1:1]='[' THEN
00803 003D                       1		ENDIF
00803 003D                        		_FFStartSound
00803 003D A2 0E08             3 1	     ldx #$0E08
00806 0040 22 E10000           8 1	     jsl $E10000
0080A 0044                        	@Error
0080A 0044 28                  4  		plp
0080B 0045 6B                  6  		rtl
0080C 0046                        	MyPBlock
0080C 0046 00FF1000               		dc.L Sound1
00810 004A 000C                   		dc.W $000C
00812 004C 00F6                   		dc.W $00F6	; 5kHz 97
00814 004E 0000                   		dc.W $0000
00816 0050 000F                   		dc.W $000F
00818 0052 00000058               		dc.L MyOTHERPBlock
0081C 0056 00FF                   		dc.W $00FF
0081E 0058                        	MyOTHERPBlock
0081E 0058 00FF1D00               		dc.L Sound2

MPW IIGS Assembler - Ver 1.2   TLMemRoutines                                                               01-Jun-13  Page  50


Loc   SLoc Object Code    Addr T M	Source Statement

00822 005C 001F                   		dc.W $001F
00824 005E 00F6                   		dc.W $00F6	; 5kHz 97
00826 0060 0000                   		dc.W $0000
00828 0062 000F                   		dc.W $000F
0082A 0064 00000000               		dc.L 0
0082E 0068 00FF                   		dc.W $00FF
00830 006A                        		EndP