;ACTION! BINARY LOADER, APRIL 1984 ;WARREN K. SMALL 71076,407 ;NOTE!!! REQUIRES ATARI DOS 2.0S SET $E=$5000 SET $491=$5000 DEFINE DISPLAY_OFF="0", DISPLAY_ON="34", BOOT="1" BYTE KEY=764, COLDST=580, FILE_COUNT=[0], CHOICE,ROW,COL CHAR ARRAY FILE_NAME(25), LOAD_NAME(15) BYTE ARRAY FILES(120), LOGO=[ $00$00$00$00$00$00$00$00$00$00$00$00$00$03$F0$00$00$00$00$00$00$00$00$00$00$00 $00$00$00$00$00$00$00$00$00$00$00$00$00$0F$F0$00$00$00$00$00$00$00$00$00$00$00 $00$00$00$00$00$00$00$00$00$07$FF$FF$FF$FF$FF$C0$00$00$00$00$00$00$00$00$00$00 $00$00$00$00$00$00$00$00$00$0F$FF$FF$FF$FF$FF$FF$F0$00$00$00$00$00$00$07$D9$80 $00$00$00$00$00$00$00$00$F8$0F$FF$FF$FF$FF$FF$FF$FF$FE$00$00$00$00$00$03$1F$80 $00$00$00$00$00$00$00$0F$F8$00$00$00$0F$F8$01$FF$FF$FF$FC$00$00$00$00$03$19$80 $00$00$00$00$00$00$00$7F$F0$00$00$00$3F$C0$00$01$FF$FF$FF$F0$00$00$00$03$19$80 $00$00$00$00$00$00$07$FF$F0$00$00$00$FF$00$7E$00$00$FF$FF$F8$00$00$00$00$00$00 $00$00$00$00$00$00$7F$FF$E0$00$00$03$FC$01$FF$80$00$00$3F$F0$00$00$00$00$07$E0 $00$00$00$00$00$03$FF$FF$C0$7E$00$07$F8$00$FE$00$00$00$00$00$00$00$00$00$3F$E0 $00$00$00$00$00$0F$FF$FF$81$FF$80$1F$E0$00$00$01$F8$00$00$00$00$00$00$00$FF$C0 $00$00$00$00$00$3F$F8$FF$07$FF$80$7F$80$3E$00$1F$FC$03$FF$C0$00$00$00$03$FF$80 $00$00$00$00$00$FF$E1$FE$1F$FF$80$FF$00$FE$00$FF$FC$7F$FF$E0$00$00$00$1F$FF$00 $00$00$00$00$03$FF$87$FC$3F$1F$83$FC$01$FC$07$F0$FF$FF$FF$E7$F0$00$00$7F$FC$00 $00$00$00$00$0F$FE$0F$F0$FC$06$07$F8$03$F8$3F$C0$FF$FF$FF$FF$FC$00$03$FF$F0$00 $00$00$00$00$3F$F8$3F$E1$F8$00$1F$F0$0F$E0$FF$03$FF$C1$FF$FF$FE$00$0F$FF$80$00 $00$00$00$00$FF$FF$FF$C7$E0$00$3F$C0$3F$81$FC$0F$F8$07$FF$FF$FC$00$3F$FC$00$00 $00$00$0F$FF$FF$FF$FF$8F$C0$00$7F$80$7F$03$F8$3F$80$1F$FE$3F$F8$00$FF$E0$00$00 $00$00$1F$FF$FF$FF$FF$1F$00$00$FF$01$FE$0F$C0$FE$00$7F$F0$7F$F0$03$FF$00$00$00 $00$00$3F$FF$FF$FF$FE$3E$01$C1$FE$03$F8$1F$83$F8$01$FF$C1$FF$C0$1F$FC$00$00$00 $00$00$00$3F$F0$0F$F8$7C$07$C3$FC$0F$F0$3F$87$E0$03$FF$03$FF$00$FF$F0$00$00$00 $00$00$00$FF$C0$1F$F0$7C$3F$87$F8$1F$E0$7F$FF$80$0F$FC$0F$FE$01$FF$80$00$00$00 $00$00$03$FF$00$3F$E0$7F$FE$0F$F0$3F$80$FF$FC$00$3F$F0$3F$F8$0F$FE$00$00$00$00 $00$00$0F$FC$00$3F$C0$7F$F8$0F$80$3F$00$FF$F0$00$7F$C0$7F$E0$1F$F8$00$00$00$00 $00$00$3F$F0$00$3F$80$3F$E0$00$00$3E$00$FF$80$00$FF$00$FF$80$FF$C0$00$00$00$00 $00$00$FF$C0$00$1F$00$00$00$00$00$00$00$FC$00$00$7E$01$FE$00$FF$00$00$00$00$00 $00$03$FF$00$00$00$00$00$00$00$00$00$00$00$00$00$00$01$F0$00$F0$00$00$00$00$00 $00$0F$FE$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$1C$00$00$00$00$00$00 $00$1F$F8$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$00$7F$00$00$00$00$00$00 $00$3F$E0$00$00$00$00$01$FF$FF$FF$FF$FF$FF$C0$00$00$00$00$FF$00$00$00$00$00$00 $00$7F$80$00$00$00$03$FF$FF$FF$FF$FF$FF$FF$FF$F0$00$00$00$FE$00$00$00$00$00$00 $00$FF$00$00$00$0F$FF$FF$FF$FF$FF$FF$FF$FF$FF$FF$FC$00$00$1C$00$00$00$00$00$00 $00$FC$00$00$03$FF$FF$F0$00$00$00$00$0F$FF$FF$FF$FF$FF$00$00$00$00$00$00$00$00 $00$00$00$01$FF$FF$F0$00$00$00$00$00$00$00$00$0F$FF$FF$F0$00$00$00$00$00$00$00 $00$00$00$0F$FF$E0$00$00$00$00$00$00$00$00$00$00$00$FF$FC$00$00$00$00$00$00$00 $00$00$00$0F$F8$00$00$00$00$00$00$00$00$00$00$00$00$00$FF$00$00$00$00$00$00$00 ] ;-------------------------- PROC PLOT_CHAR(BYTE CH) ;PLOT LETTERS ON GR.8 SCREEN BYTE CHBASE=756 CARD OFFSET,INC,SCREEN=88 BYTE POINTER BIT_MAP,CHARSET,SCR CHARSET=CHBASE*256 CH==&127 ;MASK INVERSE VIDEO IF CH>31 AND CH<96 THEN OFFSET=(CH-32)*8 ELSEIF CH>=0 AND CH<32 THEN OFFSET=(CH+64)*8 ELSE OFFSET=CH*8 FI BIT_MAP=CHARSET+OFFSET FOR INC=0 TO 7 DO SCR=SCREEN+COL+(ROW+INC)*40 SCR^=BIT_MAP^ BIT_MAP==+1 OD RETURN ;END PLOT_CHAR() ;------------------------------ PROC CONVERT_NAME() ;INSERTS PERIOD BETWEEN FILENAME & EXTENSION BYTE INC=[14] WHILE INC>11 DO LOAD_NAME(INC)=LOAD_NAME(INC-1) INC==-1 OD LOAD_NAME(11)='. LOAD_NAME(0)=14 RETURN ;END CONVERT_NAME() ;------------------------------ PROC LOAD_FILE() LOAD_NAME(0)=2 LOAD_NAME(1)='D LOAD_NAME(2)=': SASSIGN(LOAD_NAME,FILES+CHOICE*12,3,13) CONVERT_NAME() CLOSE(1) OPEN(1,LOAD_NAME,4,0) [$4C $15C8] ;ATARI DOS 2.0S ;BINARY LOAD ROUTINE RETURN ;END LOAD_FILE() ;------------------------------ PROC READ_DIRECTORY() BYTE LOCK,NEXT ZERO(FILES,120) CLOSE(3) OPEN(3,"D:*.*",6,0) DO LOCK=GETD(3) NEXT=GETD(3) INPUTMD(3,FILE_NAME,18) FILE_NAME(0)=11 IF LOCK='* THEN SCOPY(FILES+FILE_COUNT*12,FILE_NAME) FILE_COUNT==+1 IF FILE_COUNT>9 THEN EXIT FI ELSEIF FILE_NAME(1)>='0 AND FILE_NAME(1)<='9 THEN EXIT FI OD CLOSE(3) RETURN ;END READ_DIRECTORY() ;------------------------------ PROC DISPLAY_CHOICE() BYTE POS CHAR ARRAY LOAD="loading =>" COL=2 ROW=80+CHOICE*8 FOR POS=1 TO LOAD(0) DO PLOT_CHAR(LOAD(POS)) COL==+1 OD RETURN ;END DISPLAY_CHOICE() ;------------------------------ PROC DISPLAY_FILES() BYTE FILENUM,POS CHAR ARRAY TITLE="disk directory", PROMPT="select" ROW=64 COL=12 FOR POS=1 TO TITLE(0) DO PLOT_CHAR(TITLE(POS)) COL==+1 OD ROW=80 FOR FILENUM=0 TO FILE_COUNT-1 DO COL=13 PLOT_CHAR(FILENUM+48) COL==+2 FOR POS=FILENUM*12+1 TO FILENUM*12+11 DO PLOT_CHAR(FILES(POS)) COL==+1 OD ROW==+8 IF ROW>152 THEN EXIT FI OD COL=16 ROW=176 FOR POS=1 TO PROMPT(0) DO PLOT_CHAR(PROMPT(POS)) COL==+1 OD RETURN ;END DISPLAY_FILES() ;------------------------------ PROC SCROLL_COLORS() BYTE WSYNC=54282, VCOUNT=54283, COLR=53274, COUNTER,CHANGECOLR=[0], INCCOLR, CURSOR=752 OPEN(3,"K:",4,0) KEY=255 DO WHILE KEY=255 DO FOR COUNTER=1 TO 10 DO INCCOLR=CHANGECOLR DO WSYNC=0 COLR=INCCOLR INCCOLR==-1 UNTIL VCOUNT&128 OD OD CHANGECOLR==+1 OD CHOICE=GETD(3) IF CHOICE>47 AND CHOICE MOVEBLOCK($7308,A,8) ;a MOVEBLOCK($7318,CDE,24) ;cde MOVEBLOCK($7338,G,8) ;g MOVEBLOCK($7348,I,8) ;i MOVEBLOCK($7358,KL,16) ;kl MOVEBLOCK($7370,NO,16) ;no MOVEBLOCK($7390,RST,24) ;rst MOVEBLOCK($73C8,Y,8) ;y RETURN ;END CHAR_SET() ;------------------------------ PROC PLOT_LOGO() BYTE LINE,BYT CARD START,NEXTLYN,SCREEN=88 BYTE POINTER SCR START=12*40+7 ;OFFSET TO START OF LOGO DATA NEXTLYN=40 ;INC TO NEXT LINE FOR LINE=0 TO 35 DO FOR BYT=0 TO 25 DO IF LOGO(LINE*26+BYT)<>0 THEN SCR=SCREEN+START+BYT SCR^=LOGO(LINE*26+BYT)&$55 FI OD START==+NEXTLYN OD RETURN ;END PLOT_LOGO() ;------------------------------ PROC MAIN() BYTE DMA=559 DEVICE=0 POKEC($9B,$600) COLDST=BOOT ;COLDSTART ON RESET GRAPHICS(24) DMA=DISPLAY_OFF CHAR_SET() COLOR=1 SETCOLOR(1,1,0) SETCOLOR(2,1,12) SETCOLOR(4,8,5) READ_DIRECTORY() PLOT_LOGO() DISPLAY_FILES() DMA=DISPLAY_ON DO SCROLL_COLORS() DISPLAY_CHOICE() LOAD_FILE() OD