!***************************************************************************! ! ! ! SYSGEN.BAS ! ! Automatic System Initialization File Generation Program ! ! ! !***************************************************************************! !Written @LMS Technical Services, Inc. by David F. Pallmann. PROGRAM SYSGEN,1.0 IO'SPACE: MAP1 PORT'120, F, 6, 4 !I/O port address - AM120 board MAP1 PORT'210, F, 6, 240 !I/O port address - AM210 board MAP1 PORT'300, F, 6, 248 !I/O port address - AM300 board MAP1 PORT'300'2, F, 6, 232 !I/O port address - AM300 board #2 MAP1 PORT'300'3, F, 6, 216 !I/O port address - AM300 board #3 MAP1 PORT'300'4, F, 6, 104 !I/O port address - AM300 board #4 MAP1 PORT'300'5, F, 6, 96 !I/O port address - AM300 board #5 MAP1 PORT'310, F, 6, 176 !I/O port address - AM310 board MAP1 PORT'310'2, F, 6, 180 !I/O port address - AM310 board #2 MAP1 PORT'310'3, F, 6, 184 !I/O port address - AM310 board #3 MAP1 PORT'320, F, 6, 194 !I/O port address - AM320 board MAP1 PORT'330, F, 6, 133 !I/O port address - AM330 board MAP1 PORT'415, F, 6, 208 !I/O port address - AM415 board MAP1 PORT'420, F, 6, 196 !I/O port address - AM420 board MAP1 PORT'500, F, 6, 192 !I/O port address - AM500 board MAP1 PORT'600, F, 6, 160 !I/O port address - AM600 board MAP1 PORT'610, F, 6, 212 !I/O port address - AM610 board MAP1 PORT'620, F, 6, 103 !I/O port address - AM620 (AM120) port 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 START: PRINT "Generating SYSTEM.INI."; OPEN #1, "SYSTEM.INI", OUTPUT PRINT "."; : CALL MAP'IO PRINT "."; : CALL HEADER PRINT "."; : CALL JOBS PRINT "."; : CALL TRMDEF PRINT "."; : CALL DEVTBL PRINT "."; : CALL BITMAP PRINT "."; : CALL QUEUE PRINT "."; : CALL SYSTEM PRINT "."; : CALL SETUPS PRINT "."; : CALL END PRINT "."; : CLOSE #1 PRINT "." END 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 NEW'JOBALC: PRINT #1 PRINT #1, "JOBALC JOB"; STR(I); JOB'NEXT: NEXT I PRINT #1 PRINT #1, "JOBALC SPOOL" PRINT #1 RETURN TRMDEF: PRINT #1, "TRMDEF TRM1,AM100L=0:9600,ALPHA,100,100,100" TRM = 1 CALL AM120 CALL AM300'1 CALL AM300'2 CALL AM300'3 CALL AM300'4 CALL AM300'5 CALL AM310'1 CALL AM310'2 CALL AM310'3 PRINT #1, "TRMDEF PRINTR,AM100L=1:9600,TELTYP,2,2,25" PRINT #1, "TRMDEF PSEUDO,PSEUDO,NULL,100,100,100" PRINT #1 RETURN 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 BITMAP: CALL BITMAP'PHOENIX CALL BITMAP'FUJI CALL BITMAP'PRIAM PRINT #1 RETURN BITMAP'PHOENIX: IF AM410=0 THEN RETURN FOR I = 0 TO 5 PRINT #1, "BITMAP DSK,1818,"; STR(I) NEXT I RETURN BITMAP'FUJI: IF AM415=0 THEN RETURN FOR I = 0 TO 2 PRINT #1, "BITMAP DSK,3702,"; STR(I) NEXT I RETURN BITMAP'PRIAM: IF AM420=0 THEN RETURN FOR I = 0 TO 2 PRINT #1, "BITMAP DSK,1288,"; STR(I) NEXT I RETURN QUEUE: PRINT #1, "QUEUE "; STR(JOBS*5+20) PRINT #1 RETURN SYSTEM: RETURN SETUPS: PRINT #1, "ATTACH PSEUDO,SPOOL" PRINT #1, "KILL SPOOL" PRINT #1, "FORCE SPOOL" PRINT #1, "MEMORY 6K" PRINT #1, "LOG SYS:" PRINT #1, "LPTINI PRINTR.INI" PRINT #1 PRINT #1, "WAIT SPOOL" PRINT #1, "ATTACH PRINTR,SPOOL" PRINT #1 PART = INT((MEMORY-6)/JOBS) FOR I = 2 TO JOBS-1 PRINT #1, "ATTACH TRM"; STR(I); ",JOB"; STR(I) PRINT #1, "KILL JOB"; STR(I) PRINT #1, "FORCE JOB"; STR(I) PRINT #1, "MEMORY "; STR(PART); "K" PRINT #1, "VER" PRINT #1 PRINT #1, "WAIT JOB"; STR(I) PRINT #1 NEXT I RETURN END: PRINT #1, "MEMORY 0" RETURN END