***************************************************************** ** TINY TIMO TEXT MODIFIED BY ALICE ** ** USED TO PRINT THE REGISTERS ** WHY ? FOR FUN ! ** ** FOR UNDERSTANDING THE SIGNIFICATION OF THOSE BYTES ** CHECK TIMO'S NICELY WRITTEN MANUAL: ** HTTPS://LOWRESNX.INUTILIS.COM/DOCS/MANUAL.HTML ** ** AUTHOR @GREENPILLOZ ** THE MUSIC IS MICROMACHINES THEME MADE BY @DRGONZO ** ALSO CREDITS TO @NOUSERNAME010 FOR INSPIRING ME ;) ***************************************************************** VERSION 3: NOW YOU CAN POKE (WRITE) BYTES !!! IT ACTUALLY BECAME LIKE A FUN GAME ! NOW YOU CAN ACCESS ALL RAM (NOT MUCH MORE TO DO THERE BUT HEY) COMMANDS: - ARROWS: MOVE THE POINTER - A-F, 0-9: WRITE A BYTE IN HEX - ENTER: WRITE IT TO MEMORY - SPACE/BACKSPACE: FAST MOVE BETWEEN REGISTERS - /: RESTORE ORIGINAL RAM STATE - S: SAVE RAM STATE - R: LOAD RAM STATE - H,J,K,L: MOVE BETWEEN PAGES - N, D, O, X: APPLY BINNARY OPERATION BETWEEN YOUR BYTE AND THE BYTE YOUR POINTING AT (RESPECTIVELY NOT, AND, OR, XOR) WARNING: IT IS VERY WELL POSSIBLE THAT YOU'LL CRASH THE CONSOLE IF YOU KEEP POKING AT RANDOM BYTE ! (SO WHAT ?) CHALLENGES: - STOP THE MUSIC FROM PLAYING - WRITE "HELLO" IN RED - CHANGE THE POINTER COLOR - MOVE THE CURSOR - TURN EVERYTHING BLACK - TURN EVERYTHING TO GIBBERISH - CHANGE THE NOTES BEEING PLAYED - CRASH THE CONSOLE GLOBAL LNCOUNT, CY FONT 0 'DO SOME MAGIC ON RASTER (DRAWING SCREEN) ON RASTER CALL MICROROWS ON VBL CALL ONFRAME KEYBOARD ON 'GAMEPAD 1 'TOUCHSCREEN ' RESTORE POINT IF THINGS GET MESSY GOSUB SAVERESTORE 'RELOAD PERSISTENT RAM GOSUB RELOAD '****************************************************************** ' INIT ARRAYS NBREG=10 DIM TITLES$(NBREG) DIM GLOBAL REG(NBREG,4) 'ADDR, SPACING, LEN, NBLINES, PAGES I=0 'CARTRIDGE ROM TITLES$(I) = "CARTRIDGE ROM" REG(I,0) = $0000 REG(I,1) = 4 REG(I,2) = 16 REG(I,3) = 4 REG(I,4) = 511 INC I 'CHARACTER DATA TITLES$(I) = "CHARACTER DATA (2B = 1PX ROW)" REG(I,0) = $8000 REG(I,1) = 8 REG(I,2) = 16 REG(I,3) = 4 REG(I,4) = 63 INC I 'BG0 DATA TITLES$(I) = "BG0 DATA" REG(I,0) = $9000 REG(I,1) = 4 REG(I,2) = 16 REG(I,3) = 4 REG(I,4) = 31 INC I 'BG1 DATA TITLES$(I) = "BG1 DATA" REG(I,0) = $9800 REG(I,1) = 4 REG(I,2) = 16 REG(I,3) = 4 REG(I,4) = 31 INC I 'WORKING RAM TITLES$(I) = "WORKING RAM" REG(I,0) = $A000 REG(I,1) = 4 REG(I,2) = 16 REG(I,3) = 4 REG(I,4) = 255 INC I 'PERSISTEN RAM TITLES$(I) = "PERSISTEN RAM" REG(I,0) = $E000 REG(I,1) = 4 REG(I,2) = 16 REG(I,3) = 4 REG(I,4) = 63 INC I 'SPRITE REGISTER TITLES$(I) = "SPRITES (4B PER SPRITE)" REG(I,0) = $FE00 REG(I,1) = 4 REG(I,2) = 16 REG(I,3) = 4 REG(I,4) = 3 'WE START ON THIS REGISTER R=I INC I 'COLOR REGISTER TITLES$(I) = "PALETTES (8PAL, 4COL)" REG(I,0) = $FF00 REG(I,1) = 4 REG(I,2) = 16 REG(I,3) = 2 INC I 'VIDEO REGISTER TITLES$(I) = "VIDEO REG" REG(I,0) = $FF20 REG(I,1) = 1 REG(I,2) = 7 REG(I,3) = 1 INC I 'VIDEO REGISTER TITLES$(I) = "AUDIO REG (12B PER TRACK)" REG(I,0) = $FF40 REG(I,1) = 1 REG(I,2) = 12 REG(I,3) = 4 INC I 'VIDEO REGISTER TITLES$(I) = "I/O (G0/G1/TX/TY/KEY/P/E)" REG(I,0) = $FF70 REG(I,1) = 1 REG(I,2) = 7 REG(I,3) = 1 '****************************************************************** MAIN: GOSUB SAVESTATE 'MUSIC IX=0 IY=0 MYBYTE=$00 IMYBYTE=0 K=0 K$="" LASTK$="" WRITEBYTE=0 P=0 PAGE=0 GLOBAL IX, IY, MYBYTE, WRITEBYTE, R, P SPRITE 1, 0, 0, 64 SPRITE 1 PAL 4 S$="" MAXLENGTH = 16 MAXROW=12 LENGTH = MAXLENGTH I=0 I0=0 IB=0 K=0 B=0 DO IF TIMER MOD 2 = 0 THEN CLS 1 ELSE CLS 0 END IF CY=0 CALL TITLE(TITLES$(R), PAGE, REG(R,4)) P=REG(R, 0)+ PAGE * REG(R, 2) * REG(R,3) FOR ROW=1 TO REG(R,3) S$=" " FOR J=0 TO REG(R, 2)\2*2-1 IF J MOD REG(R, 1) = 0 AND J>0 THEN S$ = S$+" " S$ = S$ + HEX$(PEEK(P+J+(ROW-1)*REG(R, 2)), 2) NEXT J 'TRACE S$ CALL MICRO(S$+" ") NEXT ROW K$=INKEY$ 'CHR$(PEEK($FF74)) IF K$ <> "" THEN LASTK$=K$ K=ASC(K$) ' CURSOR NAVIGATION IF K=17 THEN 'RIGHT ADD IX, +1 IF IX > REG(R, 2)-1 THEN ADD PAGE, +1, 0 TO REG(R, 4) IX=0 END IF END IF IF K=18 THEN 'LEFT ADD IX, -1 IF IX <0 THEN ADD PAGE, -1, 0 TO REG(R, 4) IX=REG(R, 2)-1 END IF END IF 'UP/DOWN IF K=20 THEN ADD IY, -1, -1 TO REG(R, 3) IF K=19 THEN ADD IY, +1, -1 TO REG(R, 3) 'THEN VIM KEYS FOR FAST NAVIGATION IF K$="H" THEN ADD PAGE, -1, 0 TO REG(R, 4) IF K$="J" THEN ADD R, -1, 0 TO NBREG IF PAGE > REG(R, 4) THEN PAGE=0 END IF IF K$="K" THEN ADD R, +1, 0 TO NBREG IF PAGE > REG(R, 4) THEN PAGE=0 END IF IF K$="L" THEN ADD PAGE, +1, 0 TO REG(R, 4) ' SAVING AND RELOADING STATE IF K$="R" THEN GOSUB RELOAD GOTO MAIN END IF IF K=47 THEN ' THE "/" CHAR POKE $E000, $00 GOSUB RELOAD GOTO MAIN END IF IF K$="S" THEN GOSUB SAVESTATE END IF 'FAST NAVIGATION WITH SPACE/BACKSPACE IF K$=" " OR IY = REG(R, 3) THEN ADD R, +1, 0 TO NBREG PAGE=0 IX=0 IY=0 END IF IF K=8 OR IY=-1 THEN 'DEL ADD R, -1, 0 TO NBREG PAGE=0 IX=0 IY=0 END IF IF K$="N" THEN WRITEBYTE = 1 IF K$="D" THEN WRITEBYTE = 4 IF K$="O" THEN WRITEBYTE = 4 IF K$="X" THEN WRITEBYTE = 4 'WRITING BYTE IF K=10 THEN 'K=10 IS RETURN WRITEBYTE=-1 'PLAY 0, 42, 1 END IF B=-1 IF (K>=65 AND K<=70) THEN B=(K-65)+10 IF (K>=47 AND K<=57) THEN B=K-48 IF B>=0 THEN IF IMYBYTE = 0 THEN MYBYTE = (MYBYTE AND %00001111) + B*2^4 ELSE MYBYTE = (MYBYTE AND %11110000) + B END IF ADD IMYBYTE, 1, 0 TO 1 ELSE IMYBYTE=0 END IF END IF CY=13 CALL MICRO(" KEY CODE: "+HEX$(K, 2)+" OR "+BIN$(K, 8)+" OR "+STR$(K)+" OR "+CHR$(K)+" ") CALL MICRO(" YOUR BYTE: "+HEX$(MYBYTE, 2)+" OR "+BIN$(MYBYTE, 8)+" OR "+STR$(MYBYTE)+" ") ADR = REG(R, 0) + IX + IY*REG(R,2) B = PEEK(ADR) CALL MICRO(" CURR BYTE: "+HEX$(B, 2)+" OR "+BIN$(B, 8)+" OR "+STR$(B)+" ") CY=18 CALL MICRO(" N=NOT D=AND O=OR X=XOR RET=POKE") C=9 CALL MICRO(" H=LEFT J/BCKSP=UP K/SP=DOWN L=RIGHT") SPRITE 1, (IX+0.5)*8+(IX\REG(R, 1)*0.5)*8, (IY+3)*6, WAIT VBL LOOP SUBS: '****************************************************************** RELOAD: IF PEEK($E000) = $FF THEN COPY $E001,$170 TO $FE00 ELSE COPY $E200,$170 TO $FE00 END IF RETURN SAVESTATE: POKE $E000, $FF COPY $FE00,$170 TO $E001 RETURN SAVERESTORE: COPY $FE00,$170 TO $E200 RETURN SUB MICRO(T$) 'DISPLAYS MICRO TEXT 4X6 'L : LENGTH OF STRING 'CX : X POSITION OF CHARACTER 'CY : Y POSITION OF CHARACTER 'P : POSITION OF CHARACTER BEING HANDLED 'C$ : CHARACTER BEING HANDLED 'B : BACKGROUND 0 OR 1 IF TIMER MOD 2 = 0 THEN L=LEN(T$) CX=0 FOR I=1 TO L\2 C$=MID$(T$,I*2,1) BG 1 TEXT CX,CY,C$ INC CX NEXT I INC CY ELSE IF TIMER MOD 2 = 1 THEN L=LEN(T$) CX=0 FOR I=1 TO L\2 C$=MID$(T$,I*2-1,1) BG 0 TEXT CX,CY,C$ INC CX NEXT I INC CY END IF END SUB SUB TITLE(T$, PAGE, NBPAGE) CY=0 S$ = STR$(PAGE+1)+"/"+STR$(NBPAGE+1)+" " MAR$ = LEFT$(" ", 35-LEN(S$)) CALL MICRO(" "+HEX$(P)+MAR$+S$) L = LEN(T$) M = 18-L\2 MAR$ = LEFT$("----------------------------------------", M) CALL MICRO(MAR$+" "+T$+" "+MAR$+"-----") INC CY END SUB SUB ONFRAME ' WE CALL IT ON THIS SUBROUTINE CALL ' TO BE SURE THAT THE TIMING IS RIGHT IF WRITEBYTE=1 THEN 'NOT ADR = REG(R, 0) + IX + IY*REG(R,2) POKE ADR, NOT MYBYTE ELSE IF WRITEBYTE=2 THEN 'AND ADR = REG(R, 0) + IX + IY*REG(R,2) B = PEEK(ADR) POKE ADR, B AND MYBYTE ELSE IF WRITEBYTE=3 THEN 'OR ADR = REG(R, 0) + IX + IY*REG(R,2) B = PEEK(ADR) POKE ADR, B OR MYBYTE ELSE IF WRITEBYTE=4 THEN 'XOR ADR = REG(R, 0) + IX + IY*REG(R,2) B = PEEK(ADR) POKE ADR, B XOR MYBYTE ELSE IF WRITEBYTE THEN ADR = REG(R, 0) + IX + IY*REG(R,2) POKE ADR, MYBYTE END IF WRITEBYTE = 0 END SUB SUB MICROROWS 'HANDLES WHAT ROW IS BEING DRAWN 'AND WHERE THE NEXT CHARACTER IS DISPLAYED 'Y : Y POSITION Y=(RASTER\6)*2-1 SCROLL 0,0,Y 'HERE'S THE OTHER PART OF THE MAGIC...MOVE BACKGROUND 'TO OVERPRINT THE CHARACTER. SCROLL 1,-4,Y END SUB #1:MAIN PALETTES 003F000000300000000C000000030000 00302031003F2A15003F2A15003F2A15 #2:MAIN CHARACTERS 00000000000000000000000000000000 40404000400000000000000000000000 A0A00000000000000000000000000000 A0E0A0E0A00000000000000000000000 40E040E0400000000000000000000000 A0204080A00000000000000000000000 0040E040000000000000000000000000 40400000000000000000000000000000 20404040200000000000000000000000 80404040800000000000000000000000 00A040A0000000000000000000000000 0040E040000000000000000000000000 00000040400000000000000000000000 0000E000000000000000000000000000 00000000400000000000000000000000 20204080800000000000000000000000 E0A0A0A0E00000000000000000000000 40C04040E00000000000000000000000 E020E080E00000000000000000000000 E0206020E00000000000000000000000 A0A0E020200000000000000000000000 E080E020E00000000000000000000000 E080E0A0E00000000000000000000000 E0202020200000000000000000000000 E0A0E0A0E00000000000000000000000 E0A0E020200000000000000000000000 00400040000000000000000000000000 00400040800000000000000000000000 20408040200000000000000000000000 00E000E0000000000000000000000000 80402040800000000000000000000000 C0204000400000000000000000000000 608060A0C00000000000000000000000 40A0E0A0A00000000000000000000000 C0A0C0A0C00000000000000000000000 60808080600000000000000000000000 C0A0A0A0C00000000000000000000000 E080C080E00000000000000000000000 E080C080800000000000000000000000 6080A0A0600000000000000000000000 A0A0E0A0A00000000000000000000000 E0404040E00000000000000000000000 E0202020C00000000000000000000000 A0A0C0A0A00000000000000000000000 80808080E00000000000000000000000 E0E0A0A0A00000000000000000000000 C0A0A0A0A00000000000000000000000 40A0A0A0400000000000000000000000 C0A0C080800000000000000000000000 40A0A0A0600000000000000000000000 C0A0C0A0A00000000000000000000000 60804020C00000000000000000000000 E0404040400000000000000000000000 A0A0A0A0600000000000000000000000 A0A0A0A0400000000000000000000000 A0A0A0E0E00000000000000000000000 A0A040A0A00000000000000000000000 A0A06020C00000000000000000000000 E0204080E00000000000000000000000 60404040600000000000000000000000 80804020200000000000000000000000 C0404040C00000000000000000000000 40A00000000000000000000000000000 00000000E00000000000000000000000 C38100000081C300C38100000081C300 3C7EDBFFBDC37E3C0000000000000000 003C3C3C3C3C2400007E3C7E3C7E2400 #15:MAIN SOUND 2800303A000000007801F04F0AFF0000 080050601C0000002800303019FE0000 180080F0002F0F003800505000000000 28001064002A7A002800000F154D0900 1800000F000000000800000F00000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 8E00010D020001030400010504800105 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040080240 40000140400704404000054040000440 40000640400705404000040940000409 4000050A400004094000060B4080050C C04040094040400E4040400F40C04009 C00040094007400E4008400F40804009 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 FF000000000000000000000043190000 0000000000000000113C000000000000 00000000431900000000000000000000 FF000000000000000000000043190000 0000000000000000113C000000000000 00000000431900000000000000000000 152FE7000000152F00000000192F0015 2F00000000152F000000001A2F00192F 00000000172F00000000192F00000000 152F00000000152F00000000192F0015 2F000000001A2F000000001A2F00192F 000000001A2F000000001C2F00000000 316F00FF000000000000000000000000 00000000000000000000000000000000 000000002F6F00FF0000000000000000 316F00FF000000000000000000000000 00000000000000000000000000000000 000000002F6F00000000000000000000 2D6F00FF000000000000000000000000 00000000000000000000000000000000 000000002B6F00FF0000000000000000 2D6F00FF000000000000000000000000 00000000000000000000000000000000 000000002B6F00000000000000000000 2D6F00FF0000FF6F00FF00002D6F00FF 6F00FF0000306F00FF6F00306F00306F 00FF0000326F00FF0000326F00FF0000 2D6F00FF00000000000000002D6F00FF 0000000000306F00FF0000306F00306F 00FF00002F6F00FF00002B6F00FF0000 316F00FF0000FF6F00FF0000316F00FF 6F00FF0000346F00FF6F00346F00346F 00FF0000366F00FF0000366F00FF0000 316F00FF0000000000000000316F00FF 0000000000346F00FF0000346F00346F 00FF0000326F00FF00002F6F00FF0000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 113C0000000000000000000043190000 0000000000000000113C00000000113C 00000000431900000000000000000000 FF000000000000000000000043190000 0000000000000000113C000000000000 00000000431900000000431900000000 1D650000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 22650000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 24650000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 22650000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000FF0000 2D6F00FF000000000000000000000000 00000000000000000000000000000000 000000002B6F00FF0000000000000000 2D6F00FF000000000000000000000000 00000000000000000000000000000000 000000002B6F00000000000000000000 316F00FF000000000000000000000000 00000000000000000000000000000000 000000002F6F00FF0000000000000000 316F00FF000000000000000000000000 00000000000000000000000000000000 000000002F6F00000000000000000000 2D6F00FF0000FF6F00FF00002D6F00FF 6F00FF0000306F00FF6F00306F00306F 00FF0000326F00FF0000326F00FF0000 2D6F00FF00000000000000002D6F00FF 0000000000306F00FF0000306F00306F 00FF00002F6F00FF00002B6F00FF0000 316F00FF0000FF6F00FF0000316F00FF 6F00FF0000346F00FF6F00346F00346F 00FF0000366F00FF0000366F00FF0000 316F00FF0000000000000000316F00FF 0000000000346F00FF0000346F00346F 00FF0000326F00FF00002F6F00FF0000