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 ›