At the beginning, there was the QL (128k,2 120k MDVs). Then, the boot files were only to load one program from an mdv. After, I got a SuperQboard (with 512K more RAM, TK2 and 2 720k FLPs – and soon a mouse). Thus I could boot a floppy with several tools (for inst. the four Psion programs, C68 edit-compile-load-make, etc.) Today, I’ve got a Tetroid (with 768k more RAM, TK2 and 2 720k flp…
AND : a 8Gb CF store. I already told how I decided to partition this huge space :
Number One partition called GIRL to be always linked to WIN1
8 partitions called BOY2 to BOY9 that could be linked to WIN2
10 partitions called CAT0 to CAT9 and 10 partitions called DOG0 to DOG9 to be linked to WIN3
One may not create too big partitions (however, one may have up to 32 – I have 29), and one may not link too many of them at the same time, because their FAT must reside in RAM : the GIRL , BOYs and CATs partitions have a 60k FAT and DOGs a 110k FAT.
Here is the definitive version of my CF setup tools :
Code: Select all
32500 DEFine PROCedure DEST(N$)
32501 D$ = 'WIN3_' & N$
32502 MAKE_DIR D$
32503 DEST_USE D$
32504 END DEFine
32505 DEFine PROCedure NO_BOY
32506 WIN_DRIVE 2
32507 END DEFine
32508 DEFine PROCedure NO_ANIMAL
32509 WIN_DRIVE 3
32510 END DEFine
32511 DEFine PROCedure UP_GIRL
32512 CLS #2
32513 PRINT#2,"QubATA version " & WIN_VER$
32514 WIN_DISK #2,"SHOW"
32515 WIN_DISK #2,"DETAILS",1
32516 WIN_DRIVE -1
32517 WIN_DISK "INIT",1
32518 WIN_FORMAT 11,5
32519 WIN_DISK #2,"CREATE",1,1,60
32520 WIN_DRIVE 1,1,1
32521 FORMAT "WIN1_GIRL"
32522 DIR #2,WIN1_
32523 WIN_CTRL 1,14
32524 MAKE_DIR WIN1_SYS
32525 MAKE_DIR WIN1_BIN
32526 MAKE_DIR WIN1_ETC
32527 MAKE_DIR WIN1_PRG
32528 MAKE_DIR WIN1_PRG_C68
32529 MAKE_DIR WIN1_PRG_QMAC
32530 MAKE_DIR WIN1_PRG_PSION
32531 MAKE_DIR WIN1_TMP
32532 MAKE_DIR WIN1_WORK
32533 MAKE_DIR WIN1_GAMES
32535 MAKE_DIR WIN1_QubATA
32536 COPY dev$ & "setup_bas" TO WIN1_QubATA_setup_bas
32537 COPY dev$ & "unzip_exe" TO WIN1_ETC_unzip
32538 COPY dev$ & "starter1_zip" TO WIN1_QubATA_starter1_zip
32539 EW WIN1_ETC_unzip ; "-d WIN1_ WIN1_QubATA_starter1_zip"
32540 DIR #2,WIN1_
32541 WIN_FORMAT 0
32542 PRINT #2, "DONE !"
32543 WIN_DISK #2,"SUMMARY",1
32544 END DEFine
32545 DEFine PROCedure UP_BOYS
32546 CLS #2
32547 WIN_FORMAT 11,5
32548 FOR I = 2 TO 9
32549 WIN_DISK #2,"CREATE",1,I,60
32550 WIN_DRIVE 2,1,I
32551 FORMAT "WIN2_BOY" & CHR$(I+48)
32552 DIR #2,WIN2_
32553 WIN_CTRL 2,14
32554 WIN_DRIVE -1
32555 END FOR I
32556 WIN_FORMAT 0
32557 PRINT #2,"DONE !"
32558 WIN_DISK #2,"SUMMARY",1
32559 END DEFine
32560 DEFine PROCedure UP_CATS
32561 CLS #2
32562 WIN_FORMAT 11,7
32563 FOR I = 10 TO 19
32564 WIN_DISK #2,"CREATE",1,I,240
32565 WIN_DRIVE 2,1,I
32566 FORMAT "WIN2_CAT" & CHR$(I+38)
32567 DIR #2,WIN2_
32568 WIN_CTRL 2,14
32569 WIN_DRIVE -1
32570 END FOR I
32571 WIN_FORMAT 0
32572 PRINT #2,"DONE !"
32573 WIN_DISK #2,"SUMMARY",1
32574 END DEFine
32575 DEFine PROCedure UP_DOGS
32576 CLS #2
32577 WIN_FORMAT 11,7
32578 FOR I = 20 TO 29
32579 WIN_DISK #2,"CREATE",1,I,433
32580 WIN_DRIVE 2,1,I
32581 FORMAT "WIN2_DOG" & CHR$(I+28)
32582 DIR #2,WIN2_
32583 WIN_CTRL 2,14
32584 WIN_DRIVE -1
32585 END FOR I
32586 WIN_FORMAT 0
32587 PRINT #2,"DONE !"
32588 WIN_DISK #2,"SUMMARY",1
32589 END DEFine
32590 DEFine PROCedure UP_ALL
32591 UP_GIRL
32592 UP_BOYS
32593 UP_CATS
32594 UP_DOGS
32595 END_DEFine
32596 DEFine PROCedure BOY( N )
32597 CLS #2
32598 WIN_DRIVE 2
32599 WIN_DRIVE 2,1,N
32600 END DEFine
32601 DEFine PROCedure CAT( N )
32602 CLS #2
32603 WIN_DRIVE 3
32604 WIN_DRIVE 3,1,N+10
32605 END DEFine
32606 DEFine PROCedure DOG( N )
32607 CLS #2
32608 WIN_DRIVE 3
32609 WIN_DRIVE 3,1,N+20
32610 END DEFine
32611 DEFine PROCedure KILL_BOYS
32612 WIN_DRIVE -1
32613 FOR I = 2 TO 9
32614 WIN_DISK#2,"REMOVE",1,I
32615 END FOR I
32616 WIN_DRIVE 1,1,1
32617 END DEFine
32618 DEFine PROCedure KILL_CATS
32619 WIN_DRIVE -1
32620 FOR I = 10 TO 19
32621 WIN_DISK#2,"REMOVE",1,I
32622 END FOR I
32623 WIN_DRIVE 1,1,1
32624 END DEFine
32625 DEFine PROCedure KILL_DOGS
32626 WIN_DRIVE -1
32627 FOR I = 20 TO 29
32628 WIN_DISK#2,"REMOVE",1,I
32629 END FOR I
32630 WIN_DRIVE 1,1,1
32631 END DEFine
32632 DEFine PROCedure KILL_ANIMALS
32633 KILL_DOGS
32634 KILL_CATS
32635 END DEFine
32636 DEFine PROCedure KILL_ALL_EXCEPT_GIRL
32637 KILL_ANIMALS
32638 KILL_BOYS
32639 END_DEFine
I decided to reuse the way I booted from floppies (and also with QEM), but to design more modular superbasic tools… using MERGE and MRUN to dispatch the boot process among several optional files. Here is the proper BOOT file ; you may notice that it is very small :
Code: Select all
REM file BOOT
TK2_EXT : mode 4 : OK=32741
a=RESPR(250) : LBYTES 'win1_SYS_exists_bin',a : CALL a
WINDOW#0,388,42,110,4:PAPER#0,2;:INK#0,7:BORDER#0,1,7
WINDOW#1,88,216,20,4:PAPER#1,208;:INK#1,7:BORDER#1,1,7
WINDOW#2,388,172,110,48:PAPER#2,0;:INK#2,4:BORDER#2,1,7
OPEN#3,scr_512x34a0x222:PAPER#3,0;:INK#3,4:BORDER#3,1,0
32700 mrun win1_toob:bye
32757 DEFine PROCedure BYE
32758 PAPER#3,0;:INK#3,4:CSIZE#3,0,0:CLS#3:AT#3,0,7:CLS
32759 CLS#0:PRINT#3,' F1',,' F2',,' F3',,' F4',,'F5':RESTORE OK
32760 FOR i = 5 TO 69 STEP 16
32761 READ p,q,p$,Q$:PAPER#3,p:INK#3,q
32762 AT#3,1,i:PRINT#3,p$:AT#3,2,i:PRINT#3,q$
32763 END FOR i
32764 p = CODE(INKEY$(-1))/4
32765 IF p<58 OR p>62 : GO TO 32764
32766 PAPER#3,0:READ q:GO TO p+q-58
32767 END DEFine BYE
MRUN WIN1_OPTIONS
Because for me, lines to be executed only once may not stay in memory when booting terminates.
Numbered lines are only of one procedure called “bye”, which cannot run without loading several other files. One of them called OPTIONS is MRUN at the end :
Code: Select all
REM file OPTIONS
1 LRESPR 'win1_sys_ptr_gen'
2 LRESPR 'win1_sys_wman'
3 LRESPR 'win1_sys_hot_rext'
4 LRESPR 'win1_sys_Qptr'
5 LRESPR 'win1_sys_Qpac2'
6 LRESPR 'win1_sys_fileinfo2_bin'
7 MERGE WIN1_TOP_MENU
8 MERGE WIN1_SUB_MENU3
9 MERGE WIN1_SUB_MENU4
10 LAST_LINE = 10
After LRESP-ing some tools, these instructions will merge (in this instance) three files called TOP_MENU, SUB_MENU3 and SUB_MENU4.
Let’s first examine how TOP_MENU interacts with the “bye” procedure :
Code: Select all
REM file TOP_MENU
32700 mrun win1_toob:OK=32741:BYE
32741 DATA 2,7," Qed "," Text EDIT "
32742 DATA 2,7," QJUMP "," QRAM "
32743 DATA 208,7," NO "," MENU3 "
32744 DATA 208,7,"",""
32745 DATA 80,7," SUPER "," BASIC ",32746
32746 EXEC_W WIN1_BIN_QED_EXE : BYE
32747 EXEC WIN1_SYS_QRAM : BYE
32748 PRINT#2,'no SubMenu3':BYE
32749 PRINT#2,'no SubMenu4':BYE
32750 CLS:CLS#0:PRINT#0,'Say "BYE" to quit SUPER BASIC':STOP
32751 DEFine PROCedure WIN3(N)
32752 DATA_USE flp2_:WIN_DRIVE 3:IF N>=0:WIN_DRIVE 3,1,N+10
32753 END DEFine
32754 DEFine PROCedure DEST(N$)
32755 D$="WIN3_" & N$:MAKE_DIR D$:DEST_USE D$
32756 END DEFine
Code: Select all
REM file SUB_MENU3
32721 DATA 2,7," MENU3 "," PROG1 "
32722 DATA 2,7," MENU3 "," PROG2 "
32723 DATA 80,7," to TOP "," MENU "
32724 DATA 2,7," MENU3 "," PROG3 "
32725 DATA 2,7," MENU3 "," PROG4 ",32726
32726 PRINT#2,'Execute MENU3 PROG1':BYE
32727 PRINT#2,'Execute MENU3 PROG2':BYE
32728 OK=32741:PRINT#2,'Back to TOP MENU':BYE
32729 PRINT#2,'Execute MENU3 PROG3':BYE
32730 PRINT#2,'Execute MENU3 PROG4':BYE
32743 DATA 208,7," to SUB "," MENU3 "
32748 OK=32721:PRINT#2,"Going to SUB MENU 3":BYE
Same thing after merging SUB_MENU4 !
Code: Select all
REM file SUB_MENU4
32731 DATA 2,7," MENU4 "," PROG1 "
32732 DATA 2,7," MENU4 "," PROG2 "
32733 DATA 2,7," MENU4 "," PROG3 "
32734 DATA 80,7," to TOP "," MENU "
32735 DATA 2,7," MENU4 "," PROG4 ",32736
32736 PRINT#2,'Execute MENU4 PROG1':BYE
32737 PRINT#2,'Execute MENU4 PROG2':BYE
32738 PRINT#2,'Execute MENU4 PROG3':BYE
32739 OK=32741:PRINT#2,'Back to TOP MENU':BYE
32740 PRINT#2,'Execute MENU4 PROG4':BYE
32744 DATA 208,7," to SUB "," MENU4 "
32749 OK=32731:PRINT#2,"Going to SUB MENU 4":BYE
Now some tidying up ; remember that I don’t want to keep instruction lines when they are to be used only once. The file OPTIONS, when it is MRUN, will execute lines 1 to 10 the last one setting LAST_LINE=10. After executing these 10 lines it executes also line 32700, loaded by TOP_MENU (and also, to be sure by BOOT). This line asks to MRUN a little file called TOOB :
Code: Select all
REM file TOOB
WIN3 10 : DLINE 1 to LAST_LINE : BYE
32700 REMark Modular Boot POLKa fecit
Some final notes on conventions that I use :
The labels for executing some programs or procedures are white on red.
The labels for jumping to submenus are white on “purple”
The labels for jumping back to calling menus are white on red stripes
But any colour conventions may be used.
I organized this example like a “menu tree” and go back to calling menus with the same key as used for going to submenu.
But any menu graphs may be designed.
You could even use the main menu (for instance) to MERGE different sets of files even modifying this menu itself, thus using various boot processes, depending on what you want to do in a given session.
May the FORTH be with you !
A FORTH programmer will code FORTH in any langage (even SuperBasic)
Like an old (satiric) say : “a Fortran programmer can code Fortran in any langage”
POLKa