0100 ;%%%%%%%%%%›0110 ;%›0120 ;% BASIC OFF . ASM›0130 ;%›0140 ;% by Joseph R. Chiko›0150 ;% during July and August 1994›0160 ;%›0170 ;% This program was designed to turn›0180 ;% the BASIC cartridge off on a›0190 ;% XL/XE. The program works for both›0200 ;% Atari DOS 2.5 and SpartaDOS 3.2d.›0210 ;% It may work the SpartaDOS 2.3? or›0220 ;% the new release by FTE of 3.2g,›0230 ;% but as of August 10, 1994, I have›0240 ;% not had the time or desire to test›0250 ;% this. Perhaps at some future date›0260 ;% I will, but for now I am›0270 ;% satisified with this program's›0280 ;% capabilities.›0290 ;%›0300 DOSVEC = $0A›0310 SAVMSC = $58›0320 RAMTOP = $6A›0330 SDMCTL = $022F›0340 SDLSTL = $0230›0350 COLOR2 = $02C6›0360 COLOR4 = $02C8›0370 RUNAD = $02E0›0380 INITAD = $02E2›0390 MEMTOP = $02E5›0400 ;%%%%%%%%%%›0410 ;%›0420 ;% I/O Control Blocks›0430 ;% 7 blocks starting at $0340›0440 ;% X points to the 1st byte in block›0450 ;%›0460 ICHID = $0340 ; index to device name›0470 ICDNO = $0341 ; device number›0480 ICCOM = $0342 ; command›0490 ICSTA = $0343 ; status›0500 ICBAL = $0344 ; buffer address›0510 ICPTL = $0346 ; put one-byte address›0520 ICBLL = $0348 ; buffer length›0530 ICAX1 = $034A ; aux byte 1›0540 ICAX2 = $034B ; aux byte 2›0550 ICAX3 = $034C ; aux byte 3/4 points›0560 ; to disk sector›0570 ICAX5 = $034E ; aux byte 5 points›0580 ; to byte in sector›0590 ICAX6 = $034F ; aux byte 6›0600 BASICF = $03F8›0610 BFLG = $0700 ; boot flag›0620 SDOS = $0700 ; SpartaDOS›0630 BRCNT = $0701 ; # of boot sectors›0640 SDOSVER = $0701 ; SpartaDOS version›0650 PBCOPY = $0774 ; portb Copy›0660 CRTAIN = $BFFC ; cart a inserted?›0670 RESET = $C2AA›0680 PORTB = $D301›0690 WSYNC = $D40A›0700 CIOV = $E456›0710 *=$0670›0720 IOCB .BYTE 0›0730 EDITOR .BYTE "E:",155›0740 SPARTADOS .BYTE "S"›0750 ENTERBASICOFF›0760 CLD ›0770 ; % is BASIC already off›0780 LDA PORTB›0790 AND #$02›0800 CMP #$02›0810 BEQ EXITBASICOFF›0820 TURNBASICOFF›0830 LDA PORTB›0840 ORA #$02›0850 STA PORTB›0860 ; % do the same to basicf›0870 LDA #$01›0880 STA BASICF›0890 ; % ensure that carta isn't inserted›0900 STA CRTAIN›0910 ; % adjust ramtop›0920 LDA #$C0›0930 STA RAMTOP›0940 ; % test for SpartaDOS›0950 LDA SDOS›0960 CMP SPARTADOS›0970 BNE TURNEDITOROFF›0980 ; % test for version 3.2›0990 LDA SDOSVER›1000 CMP #$32›1010 BNE TURNEDITOROFF›1020 ; % SpartaDOS 3.2d keeps the last 8›1030 ; % values of PORTD starting at›1040 ; % $0774, so I am going to ORA all›1050 ; % 8›1060 LDX #$FF›1070 ORPORTBCOPY›1080 INX ›1090 LDA PBCOPY,X›1100 ORA #$02›1110 STA PBCOPY,X›1120 CPX #$07›1130 BNE ORPORTBCOPY›1140 TURNEDITOROFF›1150 LDX IOCB›1160 LDA #$0C›1170 STA ICCOM,X›1180 JSR CIOV›1190 BPL TURNEDITORON›1200 JMP RESET›1210 TURNEDITORON›1220 LDX IOCB›1230 LDA #$03›1240 STA ICCOM,X›1250 LDA #EDITOR&$00FF›1260 STA ICBAL,X›1270 LDA #EDITOR/256›1280 STA ICBAL+1,X›1290 LDA #$0C›1300 STA ICAX1,X›1310 LDA #$00›1320 STA ICAX2,X›1330 JSR CIOV›1340 BPL CHANGECOLORS›1350 JMP RESET ; on CIOV error RESET›1360 CHANGECOLORS›1370 ; % change the background color›1380 LDA #$04›1390 STA COLOR2›1400 ; % change the border color›1410 LDA #$B2›1420 STA COLOR4›1430 ; % code used when testing BASICOFF›1440 ; % to see if I was on the right›1450 ; % track›1460 ; LDA SDOS›1470 ; CMP SpartaDOS›1480 ; BNE exitBASICOff›1490 ; JMP (dosvec)›1500 EXITBASICOFF›1510 RTS ›1520 *=INITAD›1530 .WORD ENTERBASICOFF›1540 .END ›