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 ›