0100 ; MINIMONõ0110 ; BY JOE KIMBROUGHõ0120 ; (c)1988, ANTIC PUBLISHING INC.õ0130 AFP = $D800õ0140 BUFF1 = $0500õ0150 CH = $02FCõ0160 COLCRS = $55õ0170 CONSOL = $D01Fõ0180 EOL = $9Bõ0190 FASC = $D8E6õ0200 FPI = $D9D2õ0210 IFP = $D9AAõ0220 INVFLG = $02B6õ0230 KGB = $F2FDõ0240 OUTCHAR = $F2B0õ0250 PR2 = $34F3õ0260 ROWCRS = $54õ0270 ;õ0280 *= $3400õ0290 STARTCODEõ0300 LDA $FCD8 ;800 or XL/XE?õ0310 CMP #$A2õ0320 BNE MAIN.MENU ;If not 800 then proceedõ0330 LDA #$E2õ0340 STA OS.MOD.1+1õ0350 LDA #$A4õ0360 STA OS.MOD.2+1õ0370 LDA #$F6õ0380 STA OS.MOD.1+2õ0390 STA OS.MOD.2+2õ0400 MAIN.MENUõ0410 LDY #$00õ0420 LOOP.1õ0430 LDA MENU.TEXT,Y ;Print main menuõ0440 JSR PRINT.CHARõ0450 INY õ0460 CPY #$56õ0470 BNE LOOP.1õ0480 ;õ0490 PUTCURõ0500 LDA #$15 ;Place cursorõ0510 STA COLCRSõ0520 LDA #$0Cõ0530 STA ROWCRSõ0540 LDA #$20õ0550 JSR PRINT.CHARõ0560 JSR GET.CHAR ;Get menu choiceõ0570 CMP #'1õ0580 BNE DPE1õ0590 ;õ0600 JMP DOSPOKE ;Go to DOSPOKEõ0610 ;õ0620 DPE1õ0630 CMP #$32õ0640 BNE DPE2õ0650 ;õ0660 JMP DOSPEEK ;Go to DOSPEEKõ0670 ;õ0680 DPE2õ0690 CMP #'3õ0700 BNE PUTCURõ0710 ;õ0720 LDA #$0C ;Store keycode for EOL in CH forõ0730 STA CH ;auto-[RETURN] after going back to DOSõ0740 RTS õ0750 ;õ0760 DOSPOKEõ0770 LDY #$05 ;Clear ASCII input bufferõ0780 LDA #$00õ0790 LOOP.2õ0800 STA BUFF1,Yõ0810 DEY õ0820 BNE LOOP.2õ0830 ;õ0840 LDY #$00õ0850 LOOP.3õ0860 LDA DOSPOKE.TEXT,Y ;Print DOSPOKE screenõ0870 JSR PRINT.CHARõ0880 INY õ0890 CPY #$3Bõ0900 BNE LOOP.3õ0910 ;õ0920 LDA #$14 ;Place cursorõ0930 STA COLCRSõ0940 LDA #$01õ0950 STA ROWCRSõ0960 LDA #$20õ0970 JSR PRINT.CHARõ0980 LDA #$03 ;Limit input to 3 digitsõ0990 STA $CFõ1000 JSR KEYBD.INP ;Get POKE value [ASC->INT]õ1010 LDA $CC ;Hi-byte > $FF ?õ1020 BNE DOSPOKE ;If not 0, then start over.õ1030 LDA $CB ;Store low byteõ1040 STA $CEõ1050 LDA #$14 ;Place cursorõ1060 STA COLCRSõ1070 LDA #$03õ1080 STA ROWCRSõ1090 LDA #$20õ1100 JSR PRINT.CHARõ1110 LDA #$05 ;Limit input to 5 digitsõ1120 STA $CFõ1130 JSR KEYBD.INP ;Get address [ASC->INT]õ1140 LDY #$00õ1150 LDA $CE ;Get stored INTõ1160 STA ($CB),Y ;Put in addr.õ1170 JMP DOSPOKE ;Go backõ1180 ;õ1190 DOSPEEKõ1200 LDY #$05 ;Clear ASCII input bufferõ1210 LDA #$00õ1220 LOOP.4õ1230 STA BUFF1,Yõ1240 DEY õ1250 BNE LOOP.4õ1260 ;õ1270 LDY #$00õ1280 LOOP.5õ1290 LDA DOSPEEK.TEXT,Y ;Print DOSPEEK screenõ1300 JSR PRINT.CHARõ1310 INY õ1320 CPY #$64õ1330 BNE LOOP.5õ1340 ;õ1350 LDA #$10 ;Place cursorõ1360 STA COLCRSõ1370 LDA #$02õ1380 STA ROWCRSõ1390 LDA #$20õ1400 JSR PRINT.CHARõ1410 LDA #$05 ;Limit input to 5 digitsõ1420 STA $CFõ1430 JSR KEYBD.INP ;Get address [ASC->INT]õ1440 LDA #$10 ;Place cursorõ1450 STA COLCRSõ1460 LDA #$04õ1470 STA ROWCRSõ1480 LDA #$20õ1490 JSR PRINT.CHARõ1500 LDY #$00õ1510 LDA ($CB),Y ;Get contents of addressõ1520 STA $D4 ;Store lo-byte in FR0õ1530 LDA #$00õ1540 STA $D5 ;Put $00 in high byte FR0õ1550 JSR IFP ;Convert INT->FPõ1560 JSR FASC ;Convert FP->ASCõ1570 LDA $0580 ;Print ASCIIõ1580 CMP #$30õ1590 BNE PR1õ1600 ;õ1610 INC PR2õ1620 PR1õ1630 LDY #$00õ1640 CPJ3õ1650 LDA $0580,Yõ1660 CMP #$80õ1670 BCC CPJ1õ1680 ;õ1690 EOR #$80õ1700 CPJ1õ1710 CMP #$2Eõ1720 BEQ CPJ2õ1730 ;õ1740 JSR PRINT.CHARõ1750 INY õ1760 CPY #$07õ1770 BNE CPJ3õ1780 ;õ1790 CPJ2õ1800 LDA #$80õ1810 STA PR2õ1820 LDY #$06 ;Clear ASCII output bufferõ1830 LDA #$20õ1840 LOOP.6õ1850 STA $0580,Yõ1860 DEY õ1870 BNE LOOP.6õ1880 ;õ1890 LDA #$9Bõ1900 JSR PRINT.CHARõ1910 CHECK.CONSOLEõ1920 LDA CONSOL ;Check console keysõ1930 CMP #$03 ;Is it OPTION?õ1940 BNE CHECK.STARTõ1950 ;õ1960 JMP MAIN.MENUõ1970 ;õ1980 CHECK.STARTõ1990 CMP #$06 ;Is it START?õ2000 BNE CHECK.CONSOLEõ2010 ;õ2020 JMP DOSPEEK ;Re-run DOSPEEKõ2030 ;õ2040 ; -----------------------------õ2050 ; Keyboard Input/ASCII->Integerõ2060 ; -----------------------------õ2070 KEYBD.INPõ2080 LDY #$00õ2090 GET.KEYõ2100 JSR GET.CHAR ;Get a keyõ2110 CMP #$1B ;Is it ESC?õ2120 BNE CPJ4 ;If not, go onõ2130 ;õ2140 PLA ;Clear stack ofõ2150 PLA ;return addr.õ2160 JMP MAIN.MENUõ2170 CPJ4õ2180 CMP #$9Bõ2190 BEQ END.OF.LINEõ2200 ;õ2210 CMP #$7E ;Backspaceõ2220 BNE CHK9õ2230 ;õ2240 TAX õ2250 DEY õ2260 LDA #$00õ2270 STA BUFF1,Yõ2280 TXA õ2290 CPY #$FF ; Limit cursor travelõ2300 BEQ KEYBD.INPõ2310 ;õ2320 JSR PRINT.CHARõ2330 JMP GET.KEYõ2340 ;õ2350 CHK9õ2360 CMP #$3A ; Is it >9?õ2370 BCS GET.KEY ; If so, go backõ2380 ;õ2390 CMP #$30 ; Is it <0?õ2400 BCC GET.KEY ; If so, go backõ2410 ;õ2420 CPY $CF ;Check inp limitõ2430 BNE DO.BUFFRõ2440 ;õ2450 LDA #$9Bõ2460 JMP END.OF.LINEõ2470 ;õ2480 DO.BUFFRõ2490 JSR PRINT.CHARõ2500 STA BUFF1,Y ; Store digit in ASCII bufferõ2510 INY õ2520 JMP GET.KEYõ2530 ;õ2540 END.OF.LINEõ2550 JSR PRINT.CHARõ2560 LDA #$00 ;Set up FR0õ2570 STA $F2õ2580 STA $F3õ2590 LDA #$05õ2600 STA $F4õ2610 JSR AFP ; ASC -> FPõ2620 JSR FPI ; FP -> INTõ2630 LDA $D4 ; Get lo-byteõ2640 STA $CBõ2650 LDA $D5 ; Get hi-byteõ2660 STA $CCõ2670 RTS õ2680 ;õ2690 ;---------------õ2700 ; I/O ROUTINESõ2710 ;---------------õ2720 GET.CHARõ2730 STY $CD ;Save Yõ2740 OS.MOD.1õ2750 JSR KGB ;Get charõ2760 CMP #$A0 ;Inverse video?õ2770 BCC NO.INV.VIDEOõ2780 ;õ2790 EOR #$80 ;Fix inv. videoõ2800 NO.INV.VIDEOõ2810 LDX #$00 ;Disable inverse video keyõ2820 STX INVFLGõ2830 LDY $CD ;Restore Yõ2840 RTS õ2850 ;õ2860 PRINT.CHARõ2870 STY $CD ;Save Yõ2880 OS.MOD.2õ2890 JSR OUTCHAR ;Print charõ2900 LDY $CD ;Restore Yõ2910 RTS õ2920 ;õ2930 ; ------ TEXT --------õ2940 ;õ2950 MENU.TEXTõ2960 .BYTE "}",EOLõ2970 .BYTE " Ÿ¦²Ý"õ2980 .BYTE "­‰‰ÀØ­¦À‰",EOL,EOLõ2990 .BYTE EOL,EOL,EOLõ3000 .BYTE "± DOSPOKE",EOL,EOLõ3010 .BYTE "¾ DOSPEEK",EOL,EOLõ3020 .BYTE "„ EXIT TO DOS",EOL,EOLõ3030 .BYTE "Your choice: ",EOLõ3040 DOSPOKE.TEXTõ3050 .BYTE "}",EOLõ3060 .BYTE "Poke the integer:",EOL,EOLõ3070 .BYTE "Into the address:",EOL,EOL,EOLõ3080 .BYTE "Press ‰²ˆ to exit",EOLõ3090 DOSPEEK.TEXTõ3100 .BYTE "}[Press ‰²ˆ to abort input]",EOL,EOLõ3110 .BYTE "Peek address:",EOL,EOLõ3120 .BYTE "Holds number:",EOL,EOL,EOLõ3130 .BYTE "¦­ŒŠ¦‘ Main menu",EOL,EOLõ3140 .BYTE "²Œ¡³Œ Re-run DOSPEEK",EOLõ3150 *= $02E0õ3160 .WORD STARTCODEõ3170 .END õ