!***************************************************************************!
! !
! SYSGEN.BAS !
! Automatic System Initialization File Generation Program !
! !
!***************************************************************************!
!Written @LMS Technical Services, Inc. by David F. Pallmann.
MAPS: MAP1 MEMORY, F, 6, 0 !amount of memory detected
MAP1 JOBS, F, 6, 0 !number of jobs to allocate
MAP1 PART, F, 6 !partion size
MAP1 MISSING, F, 6, 255 !means board is missing
MAP1 I, F, 6 !temporary
MAP1 ADDR, F, 6 !address
MAP1 TEXT, S, 80 !text string
MAP1 PORT, F, 6 !port number
MAP1 TRM, F, 6 !current terminal number
MAP1 BASE, F, 6 !base port number
MAP1 AM210, F, 6, 0 !set if an AM210 is present
MAP1 AM300, F, 6, 0 !set if any AM300s are present
MAP1 COUNT'300, F, 6, 0 !number of AM300s detected
MAP1 AM310, F, 6, 0 !set if any AM310s are present
MAP1 COUNT'310, F, 6, 0 !number of AM310s detected
MAP1 AM320, F, 6, 0 !set if an AM320 is present
MAP1 AM330, F, 6, 0 !set if an AM330 is present
MAP1 AM410, F, 6, 0 !set if an AM410 is present
MAP1 AM415, F, 6, 0 !set if an AM415 is present
MAP1 AM420, F, 6, 0 !set if an AM420 is present
MAP1 AM500, F, 6, 0 !set if an AM500 is present
MAP1 AM600, F, 6, 0 !set if an AM600 is present
MAP1 AM610, F, 6, 0 !set if an AM610 is present
MAP1 AM620, F, 6, 0 !set if an AM620 is present
MAP'IO: IF IO(PORT'210)<>MISSING THEN AM210 = 1
IF IO(PORT'300)<>MISSING THEN AM300 = 1 : COUNT'300 = 1
IF IO(PORT'300'2)<>MISSING THEN COUNT'300 = 2
IF IO(PORT'300'3)<>MISSING THEN COUNT'300 = 3
IF IO(PORT'300'4)<>MISSING THEN COUNT'300 = 4
IF IO(PORT'300'5)<>MISSING THEN COUNT'300 = 5
IF IO(PORT'310)<>MISSING THEN AM310 = 1 : COUNT'310 = 1
IF IO(PORT'310'2)<>MISSING THEN COUNT'310 = 2
IF IO(PORT'310'3)<>MISSING THEN COUNT'310 = 3
IF IO(PORT'320)<>MISSING THEN AM320 = 1
IF IO(PORT'330)<>MISSING THEN AM330 = 1
IF IO(PORT'415)<>MISSING THEN AM415 = 1
IF IO(PORT'420)<>MISSING THEN AM420 = 1
IF IO(PORT'500)<>MISSING THEN AM500 = 1
IF IO(PORT'600)<>MISSING THEN AM600 = 1
IF IO(PORT'610)<>MISSING THEN AM610 = 1
IF IO(PORT'620)<>MISSING THEN AM620 = 1
MEMORY = WORD(1040)*2^6
JOBS = (COUNT'300*6)+(COUNT'310*4)+2
RETURN
HEADER: PRINT #1, ":T"
PRINT #1, ";System Initialization by SYSGEN version 1"
PRINT #1, ";"
PRINT #1, ";Configuration:"
PRINT #1, ";"
PRINT #1, "; 1 - AM100L CPU"
PRINT #1, "; - "; STR(MEMORY); "K bytes of memory"
IF AM210=1 THEN PRINT #1, "; 1 - AM210 floppy disk"
IF AM300=1 THEN PRINT #1, "; "; COUNT'300; "- AM300 6-port serial I/O"
IF AM310=1 THEN PRINT #1, "; "; COUNT'310; "- AM310 4-port serial I/O"
IF AM320=1 THEN PRINT #1, "; 1 - AM320 line printer interface"
IF AM330=1 THEN PRINT #1, "; 1 - AM330 communications board"
IF AM410=1 THEN PRINT #1, "; 1 - AM410 Phoenix disk controller"
IF AM415=1 THEN PRINT #1, "; 1 - AM415 Fujitsu disk controller"
IF AM420=1 THEN PRINT #1, "; 1 - AM420 Priam disk controller"
IF AM500=1 THEN PRINT #1, "; 1 - AM500 Hawk disk controller"
IF AM600=1 THEN PRINT #1, "; 1 - AM600 magtape interface"
IF AM610=1 THEN PRINT #1, "; 1 - AM610 VCR interface"
IF AM620=1 THEN PRINT #1, "; 1 - AM620 streamer tape drive"
RETURN
JOBS: PRINT #1, "JOBS "; STR(JOBS)
FOR I = 1 TO JOBS-1
IF I=1 THEN GOTO NEW'JOBALC
IF I/10=INT(I/10) THEN GOTO NEW'JOBALC
PRINT #1, ",JOB"; STR(I);
GOTO JOB'NEXT
AM120: FOR PORT = 0 TO 1
TRM = TRM+1
PRINT #1, "TRMDEF TRM"; STR(TRM); ",AM120="; STR(PORT);
PRINT #1, ":9600,ALPHA,100,100,100"
NEXT PORT
RETURN
AM300'1:
BASE = 1
CALL AM300
RETURN
AM300'2:
IF COUNT'300<2 THEN RETURN
BASE = 11
CALL AM300
RETURN
AM300'3:
IF COUNT'300<3 THEN RETURN
BASE = 21
CALL AM300
RETURN
AM300'4:
IF COUNT'300<4 THEN RETURN
BASE = 31
CALL AM300
RETURN
AM300'5:
IF COUNT'300<5 THEN RETURN
BASE = 41
CALL AM300
RETURN
AM300: FOR PORT = 0 TO 5
TRM = TRM+1
PRINT #1, "TRMDEF TRM"; STR(TRM); ",AM300="; STR(BASE+PORT);
PRINT #1, ":9600,ALPHA,100,100,100"
NEXT PORT
RETURN
AM310'1:
BASE = 0
CALL AM310
RETURN
AM310'2:
IF COUNT'310<2 THEN RETURN
BASE = 4
CALL AM310
RETURN
AM310'3:
IF COUNT'310<3 THEN RETURN
BASE = 10
CALL AM310
RETURN
AM310: FOR PORT = 0 TO 3
TRM = TRM+1
PRINT #1, "TRMDEF TRM"; STR(TRM); ",AM310="; STR(BASE+PORT);
PRINT #1, ":9600,ALPHA,100,100,100"
NEXT PORT
RETURN
DEVTBL: IF AM410=1 THEN PRINT #1, "DEVTBL DSK1,DSK2,DSK3,DSK4,DSK5"
IF AM415=1 THEN PRINT #1, "DEVTBL DSK1,DSK2"
IF AM420=1 THEN PRINT #1, "DEVTBL DSK1,DSK2"
PRINT #1, "DEVTBL TRM,RES,MEM"
IF AM320=1 THEN PRINT #1, "DEVTBL /LPR0"
IF AM600=1 THEN PRINT #1, "DEVTBL /MTU0"
IF AM610=1 THEN PRINT #1, "DEVTBL /VCR0"
IF AM620=1 THEN PRINT #1, "DEVTBL /STR0"
PRINT #1
RETURN