Bug Eyes 2 (Hacking Tips #4)

By Mr. Spock

Originally published in EUG #71

BUGEYES: example of changing filenames. The disassembly is of BUG2, executing at &6EF.

 
06EF LDX #&00  \set up user event 
06F1 STX &0220 \routine
06F4 LDX #&04  \at &400
06F6 STX &0221
06F9 LDX #4  \*FX4,12 same as *FX4,0
06FB LDA #12 \Enable cursors
06FD JSR OSbyte
0700 LDX #&3B  \Load in file at &73B
0702 LDY #&07  \BUGEYES is the first name of the
0704 JSR OScli \changing filename
0707 JSR &0724 \set up text window
070A LDX #&03  \*FX3,14 same as *FX3,6
070C LDA #&0E  \Disable printer driver
070E JSR OSbyte \not much point though
0711 LDA #50  \short delay routine
0713 PHA      \put counter on stack
0714 LDA #19   \*FX19
0716 JSR OSbyte
0719 PLA 
071A CLC 
071B SBC #&00  \and counter down
071D CMP #&00  \to zero
071F BNE &0713
0721 JMP &1E0A \and execute game

0724 LDX #&00    \VDU codes
0726 LDA &0735,X
0729 CMP #&FF    \&FF marks end of sequence
072B BEQ &0734   \so branch to exit
072D JSR OSwrch  \else VDU it
0730 INX        \bump pointer
0731 JMP &0726  \and jump back to loop
0734 RTS  \come here when all VDU codes done

\filename and VDU sequence VDU28,0,29,15,6 text window
0735 1C 00 1D 0F 06 FF 4C 2E ......L.
073D 22 42 55 47 45 59 45 53 "BUGEYES
0745 20 22 0D ** ** ** ** **  ".
0748 EQUB &FF \used at &414

\User event routine - change tape filename
0400 PHP       \Preserve registers
0401 PHA 
0402 TXA 
0403 PHA 
0404 TYA 
0405 PHA 
0406 JSR &0411 \perform event
0409 PLA       \and restore registers
040A TAY 
040B PLA 
040C TAX 
040D PLA 
040E PLP 
040F RTS 

0410 RTS 
0411 LDA &03C6 \load block number (lo) of tape block
0414 STA &0748 \store
0417 LDA #0    \?&7F=0
0419 STA &7F
041B STA &03C7 \zeroise tape block number hi
041E LDA &03CA \ensure file unlocked 
0421 AND #&FE  \by clearing bit 1
0423 STA &03CA \of &3CA
0426 AND #&06  \examine bit 1+2 of block flag
0428 CMP #&06  \if both set
042A BNE &0410 \then finished block
042C LDA &0748 \retrieve block number lo
042F STA &7E   \put in &7E
0431 LDX #&03
0433 CLC 
0434 ROL &7E   \multiply address by 8
0436 ROL &7F   \to point to next message
0438 DEX 
0439 BNE &0433
043B LDX #0
043D LDY #0
043F LDA &7E
0441 CLC       \&7C/D = &7E/F + &45D
0442 ADC #&5D  \to point to messages
0444 STA &7C
0446 LDA &7F
0448 ADC #&04
044A STA &7D
044C LDA (&7C),Y  \get character of message
044E STA &03D2,X  \and put in block header area
0451 INX
0452 INY 
0453 CPY #&08     \until got 8 characters
0455 BNE &044C
0457 LDA #&00
0459 STA &03D2,Y  \filename terminates with zero
045C RTS 

\these are the &51 filenames to feed into filename in block
\header of memory (&3B2-&3BD) to give a changing filename

045D 42 55 47 45 59 45 53 20 BUGEYES 
0465 20 20 49 49 20 20 20 20   II    
046D 20 20 49 53 20 20 20 20   IS    
0475 4C 4F 41 44 49 4E 47 20 LOADING 
047D 20 20 20 20 20 20 20 20         
0485 57 52 49 54 54 45 4E 20 WRITTEN 
048D 20 20 42 59 20 20 20 20   BY    
0495 20 20 54 48 45 20 20 20   THE   
049D 20 20 41 52 54 20 20 20   ART   
04A5 20 20 43 52 45 57 20 20   CREW  
04AD 20 20 57 49 54 48 20 20   WITH  
04B5 20 54 48 41 4E 4B 53 20  THANKS 
04BD 20 20 20 54 4F 20 20 20    TO   
04C5 20 42 45 43 4B 59 2C 20  BECKY, 
04CD 20 54 52 41 43 59 20 26  TRACY &
04D5 49 2E 57 41 55 47 48 2E I.WAUGH.
04DD 20 20 20 20 20 20 20 20         
04E5 20 57 41 54 43 48 20 20  WATCH  
04ED 20 20 4F 55 54 20 20 20   OUT   
04F5 20 20 46 4F 52 20 20 20   FOR   
04FD 20 54 48 45 53 45 20 20  THESE  
0505 20 4F 54 48 45 52 20 20  OTHER  
050D 20 47 52 45 41 54 20 20  GREAT  
0515 52 45 4C 45 41 53 45 53 RELEASES
051D 20 20 46 52 4F 4D 20 20   FROM  
0525 20 41 2E 53 2E 4C 20 20  A.S.L  
052D 20 20 4C 54 44 20 20 20   LTD   
0535 20 20 41 4E 44 20 20 20   AND   
053D 20 20 54 48 45 20 20 20   THE   
0545 41 52 54 20 43 52 45 57 ART CREW
054D 2A 2A 2A 2A 2A 2A 2A 2A ********
0555 20 20 20 20 20 20 20 20         
055D 20 5A 45 4C 44 41 20 20  ZELDA  
0565 20 4D 45 45 54 53 20 20  MEETS  
056D 20 20 54 48 45 20 20 20   THE   
0575 42 55 47 45 59 45 53 2C BUGEYES,
057D 47 45 4E 45 53 49 53 20 GENESIS 
0585 20 50 52 4F 42 45 2C 20  PROBE, 
058D 43 41 56 45 4D 41 4E 20 CAVEMAN 
0595 20 43 41 50 45 52 53 20  CAPERS 
059D 20 20 20 20 20 20 20 20         
05A5 20 48 45 4C 4C 4F 20 20  HELLO  
05AD 20 20 54 4F 20 20 20 20   TO    
05B5 20 20 41 4C 4C 20 20 20   ALL   
05BD 20 20 41 54 20 20 20 20   AT    
05C5 20 20 54 48 45 20 20 20   THE   
05CD 20 20 54 59 4E 45 20 20   TYNE  
05D5 20 20 41 4E 44 20 20 20   AND   
05DD 20 20 57 45 41 52 20 20   WEAR  
05E5 20 20 42 42 43 20 20 20   BBC   
05ED 20 20 55 53 45 52 20 20   USER  
05F5 20 47 52 4F 55 50 20 20  GROUP  
05FD 20 20 20 20 20 20 20 20         
0605 2A 2A 2A 2A 2A 2A 2A 2A ********
060D 20 20 54 48 49 53 20 20   THIS  
0615 20 20 47 41 4D 45 20 20   GAME  
061D 20 20 44 4F 45 53 20 20   DOES  
0625 20 20 4E 4F 54 20 20 20   NOT   
062D 20 49 4E 43 4C 55 44 45  INCLUDE
0635 46 4C 49 43 4B 45 52 2C FLICKER,
063D 31 36 4B 20 52 4F 4D 2C 16K ROM,
0645 20 53 4D 41 4C 4C 20 20  SMALL  
064D 53 50 52 49 54 45 53 2C SPRITES,
0655 20 20 20 4F 52 20 20 20    OR   
065D 20 20 41 4E 59 20 20 20   ANY   
0665 20 4F 54 48 45 52 20 20  OTHER  
066D 20 20 42 41 44 20 20 20   BAD   
0675 50 4F 49 4E 54 53 20 21 POINTS !
067D 20 20 20 20 20 20 20 20         
0685 20 43 4F 55 4E 54 20 20  COUNT  
068D 20 20 44 4F 57 4E 20 20   DOWN  
0695 20 54 20 2D 20 38 20 20  T - 8  
069D 20 54 20 2D 20 37 20 20  T - 7  
06A5 20 54 20 2D 20 36 20 20  T - 6  
06AD 20 54 20 2D 20 35 20 20  T - 5  
06B5 20 54 20 2D 20 34 20 20  T - 4  
06BD 20 54 20 2D 20 33 20 20  T - 3  
06C5 20 54 20 2D 20 32 20 20  T - 2  
06CD 20 54 20 2D 20 31 20 20  T - 1  
06D5 20 20 20 20 20 20 20 20         
06DD 20 20 20 20 20 20 20 20         

Mr Spock 28 Mar 2004