!***************************************************************************! ! ! ! AM-1092-M SIMULATOR ! ! ! !***************************************************************************! !Copyright (C) 1986 by UltraSoft. All Rights Reserved. ! !Written by: David Pallmann ! !Edit History: !04-Jul-86 created. /DFP MAP1 I,F MAP1 J,F MAP1 COMMAND,S,1 MAP1 TEXT,S,80 MAP1 COVER,F MAP1 CPU,F MAP1 MEM1,F MAP1 MEM2,F MAP1 AM415,F MAP1 VCR,F MAP1 DISK,F MAP1 AM600,F MAP1 TAPE,F MAP1 AM316,F MAP1 TERM,F INIT: COVER = -1 CPU = -1 MEM1 = -1 MEM2 = -1 AM415 = -1 VCR = -1 DISK = -1 AM600 = -1 TAPE = -1 AM316 = -1 TERM = -1 SCREEN: PRINT TAB(-1,0); PRINT "UltraSoft AM1092M simulator"; PRINT TAB(3,56); "B - boot system"; PRINT TAB(4,56); "R COVER - remove cover"; PRINT TAB(5,56); "R CPU - remove AM100L"; PRINT TAB(6,56); "R MEM1 - remove AM720 1"; PRINT TAB(7,56); "R MEM2 - remove AM720 2"; PRINT TAB(8,56); "R 415 - remove AM415"; PRINT TAB(9,56); "R VCR - remove AM610"; PRINT TAB(10,56); "R DISK - remove drive"; PRINT TAB(11,56); "R 600 - remove AM600"; PRINT TAB(12,56); "R TAPE - remove magtape"; PRINT TAB(13,56); "R 316 - remove AM316"; PRINT TAB(14,56); "R TERM - remove CRT"; PRINT TAB(15,56); "W TAPE - warm boot AM600"; PRINT TAB(16,56); "W VCR - warm boot AM610"; PRINT TAB(17,56); "Q - quit"; PRINT TAB(-1,23); CALL PRINT'DISK CALL PRINT'TAPE CALL PRINT'TERM DRAW: PRINT TAB(-1,23); IF COVER THEN CALL PRINT'COVER : GOTO SELECT CALL PRINT'BUS IF CPU THEN CALL PRINT'CPU IF MEM1 THEN CALL PRINT'MEM1 IF MEM2 THEN CALL PRINT'MEM2 IF AM415 THEN CALL PRINT'AM415 IF VCR THEN CALL PRINT'VCR IF AM600 THEN CALL PRINT'AM600 IF AM316 THEN CALL PRINT'AM316 SELECT: PRINT TAB(-1,28); PRINT TAB(-1,24); PRINT TAB(20,56); ">"; TAB(-1,9); INPUT LINE TEXT PRINT TAB(-1,23); PRINT TAB(-1,10); IF TEXT="" THEN GOTO SELECT TEXT = UCS(TEXT) PRINT TAB(22,56); COMMAND = LEFT(TEXT,1) TEXT = RIGHT(TEXT,LEN(TEXT)-2) IF COMMAND="B" THEN GOTO BOOT IF COMMAND="R" THEN GOTO REMOVE IF COMMAND="Q" THEN GOTO FINISH IF COMMAND="W" THEN GOTO WARM WHAT: PRINT TAB(-1,24); "What?" TAB(-1,23); GOTO SELECT WARM: IF TEXT="VCR" THEN GOTO WARM'VCR IF TEXT="610" THEN GOTO WARM'VCR IF TEXT="AM610" THEN GOTO WARM'VCR IF TEXT="TAPE" THEN GOTO WARM'TAPE IF TEXT="600" THEN GOTO WARM'TAPE IF TEXT="AM600" THEN GOTO WARM'TAPE GOTO WHAT WARM'VCR: PRINT TAB(-1,29); PRINT TAB(-1,24); FOR I = 7 TO 11 PRINT TAB(I,32); SPACE(13); NEXT I IF COVER PRINT TAB(14,18); " "; : CALL WAIT : CALL WAIT IF CPU ELSE GOTO NO'BOOT IF MEM1 ELSE GOTO NO'BOOT IF VCR ELSE GOTO NO'BOOT GOTO BOOTUP WARM'TAPE: PRINT TAB(-1,29); PRINT TAB(-1,24); FOR I = 7 TO 11 PRINT TAB(I,32); SPACE(13); NEXT I IF COVER PRINT TAB(14,18); " "; : CALL WAIT : CALL WAIT IF CPU ELSE GOTO NO'BOOT IF MEM1 ELSE GOTO NO'BOOT IF AM600 ELSE GOTO NO'BOOT IF TAPE ELSE GOTO NO'BOOT GOTO BOOTUP BOOT: PRINT TAB(-1,29); PRINT TAB(-1,24); FOR I = 7 TO 11 PRINT TAB(I,32); SPACE(13); NEXT I IF COVER PRINT TAB(14,18); " "; : CALL WAIT : CALL WAIT IF CPU ELSE GOTO NO'BOOT IF MEM1 ELSE GOTO NO'BOOT IF COVER PRINT TAB(14,18); "b"; : CALL WAIT : CALL WAIT BOOTUP: PRINT TAB(-1,24); IF COVER PRINT TAB(14,18); "F"; : CALL WAIT : CALL WAIT IF NOT(DISK) AND COVER THEN PRINT TAB(14,18); "3"; : CALL WAIT : CALL WAIT IF NOT(DISK) THEN GOTO NO'BOOT IF NOT(AM415) AND COVER THEN PRINT TAB(14,18); "3"; : CALL WAIT : CALL WAIT IF NOT(AM415) THEN GOTO NO'BOOT PRINT TAB(14,18); " "; : CALL WAIT : CALL WAIT IF NOT(AM316) THEN PRINT TAB(22,56); "Terminal Dead"; : GOTO SELECT IF NOT(TERM) THEN PRINT TAB(22,56); "Terminal Dead"; : GOTO SELECT PRINT TAB(7,32); ".TRMDEF"; PRINT TAB(8,32); ".DEVTBL"; : CALL WAIT PRINT TAB(9,32); ".BITMAP"; PRINT TAB(10,32); ".SYSTEM"; : CALL WAIT PRINT TAB(11,32); ".MEMORY 0"; PRINT TAB(22,56); "System Up"; PRINT TAB(23,56); IF MEM1 AND MEM2 THEN PRINT "1024K"; ELSE PRINT "512K"; PRINT " memory present"; GOTO SELECT NO'BOOT: PRINT TAB(8,36); "X"; TAB(8,40); "X"; PRINT TAB(10,35); "_______"; PRINT TAB(-1,24); TAB(22,56); "** NO BOOT **"; GOTO SELECT REMOVE: IF TEXT="COVER" THEN GOTO R'COVER IF TEXT="CPU" THEN GOTO R'CPU IF TEXT="MEM" THEN GOTO R'MEM IF TEXT="720" THEN GOTO R'MEM IF TEXT="MEM1" THEN GOTO R'MEM1 IF TEXT="MEM2" THEN GOTO R'MEM2 IF TEXT="AM415" THEN GOTO R'AM415 IF TEXT="415" THEN GOTO R'AM415 IF TEXT="VCR" THEN GOTO R'VCR IF TEXT="610" THEN GOTO R'VCR IF TEXT="AM610" THEN GOTO R'VCR IF TEXT="DISK" THEN GOTO R'DISK IF TEXT="AM600" THEN GOTO R'AM600 IF TEXT="600" THEN GOTO R'AM600 IF TEXT="TAPE" THEN GOTO R'TAPE IF TEXT="MAGTAPE" THEN GOTO R'TAPE IF TEXT="AM316" THEN GOTO R'AM316 IF TEXT="316" THEN GOTO R'AM316 IF TEXT="TERM" THEN GOTO R'TERM IF TEXT="TRM" THEN GOTO R'TERM IF TEXT="CRT" THEN GOTO R'TERM GOTO WHAT R'COVER: IF COVER ELSE GOTO REPLACE'COVER REMOVE'COVER: PRINT TAB(-1,24); "Cover removed"; TAB(4,66); "replace"; TAB(-1,23); COVER = 0 FOR I = 10 TO 15 PRINT TAB(I,1); SPACE(23); NEXT I GOTO DRAW REPLACE'COVER: PRINT TAB(-1,24); "Cover replaced"; TAB(4,66); "remove "; TAB(-1,23); COVER = -1 GOTO DRAW R'TERM: IF TERM ELSE GOTO REPLACE'TERM REMOVE'TERM: PRINT TAB(-1,24); "Terminal removed"; PRINT TAB(14,66); "replace"; TERM = 0 FOR I = 6 TO 13 PRINT TAB(I,29); SPACE(19); NEXT I GOTO SELECT REPLACE'TERM: PRINT TAB(-1,24); "Terminal replaced"; PRINT TAB(14,66); "remove "; TERM = -1 CALL PRINT'TERM GOTO SELECT R'DISK: IF DISK ELSE GOTO REPLACE'DISK REMOVE'DISK: PRINT TAB(-1,24); "Drive removed"; PRINT TAB(10,66); "replace"; DISK = 0 FOR I = 17 TO 23 PRINT TAB(I,1); SPACE(23); NEXT I GOTO SELECT REPLACE'DISK: PRINT TAB(-1,24); "Drive replaced"; PRINT TAB(10,66); "remove "; DISK = -1 PRINT TAB(-1,23); CALL PRINT'DISK GOTO SELECT R'AM600: IF COVER THEN GOTO FIRST IF AM600 ELSE GOTO REPLACE'AM600 REMOVE'AM600: PRINT TAB(-1,24); "AM600 removed"; PRINT TAB(11,66); "replace"; AM600 = 0 FOR I = 10 TO 14 PRINT TAB(I,11); " "; NEXT I GOTO SELECT REPLACE'AM600: PRINT TAB(-1,24); "AM600 replaced"; PRINT TAB(11,66); "remove "; AM600 = -1 PRINT TAB(-1,23); CALL PRINT'AM600 GOTO DRAW R'TAPE: IF TAPE ELSE GOTO REPLACE'TAPE REMOVE'TAPE: PRINT TAB(-1,24); "Tape Drive removed"; PRINT TAB(12,66); "replace"; TAPE = 0 FOR I = 6 TO 8 PRINT TAB(I,1); SPACE(23); NEXT I GOTO SELECT REPLACE'TAPE: PRINT TAB(-1,24); "Tape Drive replaced"; PRINT TAB(12,66); "remove "; TAPE = -1 PRINT TAB(-1,23); CALL PRINT'TAPE GOTO SELECT R'CPU: IF COVER THEN GOTO FIRST IF CPU ELSE GOTO REPLACE'CPU REMOVE'CPU: PRINT TAB(-1,24); "CPU removed"; TAB(5,66); "replace"; TAB(-1,23); CPU = 0 FOR I = 10 TO 14 PRINT TAB(I,1); " "; NEXT I GOTO SELECT REPLACE'CPU: PRINT TAB(-1,24); "CPU replaced"; TAB(5,66); "remove "; TAB(-1,23); CPU = -1 CALL PRINT'CPU GOTO SELECT R'MEM: IF COVER THEN GOTO FIRST IF MEM1 THEN GOTO R'MEM1 IF MEM2 THEN GOTO R'MEM2 GOTO R'MEM1 R'MEM2: IF COVER THEN GOTO FIRST IF MEM2 ELSE GOTO REPLACE'MEM2 REMOVE'MEM2: PRINT TAB(-1,24); "Memory #2 removed"; TAB(7,66); "replace"; MEM2 = 0 FOR I = 10 TO 14 PRINT TAB(I,5); " "; NEXT I GOTO SELECT REPLACE'MEM2: PRINT TAB(-1,24); "Memory #2 replaced"; TAB(7,66); "remove "; MEM2 = -1 GOTO DRAW R'MEM1: IF COVER THEN GOTO FIRST IF MEM1 ELSE GOTO REPLACE'MEM1 REMOVE'MEM1: PRINT TAB(-1,24); "Memory #1 removed"; TAB(6,66); "replace"; MEM1 = 0 FOR I = 10 TO 14 PRINT TAB(I,3); " "; NEXT I GOTO SELECT REPLACE'MEM1: PRINT TAB(-1,24); "Memory #1 replaced"; TAB(6,66); "remove"; MEM1 = -1 GOTO DRAW R'AM415: IF COVER THEN GOTO FIRST IF AM415 ELSE GOTO REPLACE'AM415 REMOVE'AM415: PRINT TAB(-1,24); "AM415 removed"; TAB(8,66); "replace"; AM415 = 0 FOR I = 10 TO 14 PRINT TAB(I,7); " "; NEXT I GOTO SELECT REPLACE'AM415: PRINT TAB(-1,24); "AM415 replaced"; TAB(8,66); "remove "; AM415 = -1 GOTO DRAW R'VCR: IF COVER THEN GOTO FIRST IF VCR ELSE GOTO REPLACE'VCR REMOVE'VCR: PRINT TAB(-1,24); "AM610 removed"; TAB(9,66); "replace"; VCR = 0 FOR I = 10 TO 14 PRINT TAB(I,9); " "; NEXT I GOTO SELECT REPLACE'VCR: PRINT TAB(-1,24); "AM610 replaced"; TAB(9,66); "remove "; VCR = -1 GOTO DRAW R'AM316: IF COVER THEN GOTO FIRST IF AM316 ELSE GOTO REPLACE'AM316 REMOVE'AM316: PRINT TAB(-1,24); "AM316 removed"; TAB(13,66); "replace"; AM316 = 0 FOR I = 10 TO 14 PRINT TAB(I,13); " "; NEXT I GOTO SELECT REPLACE'AM316: PRINT TAB(-1,24); "AM316 replaced"; TAB(13,66); "remove "; AM316 = -1 GOTO DRAW FIRST: PRINT TAB(-1,24); "Remove cover first"; GOTO SELECT FINISH: PRINT TAB(-1,24); PRINT TAB(24,1); END PRINT'COVER: FOR I = 10 TO 15 PRINT TAB(I,1); FOR J = 1 TO 23 PRINT TAB(-1,49); NEXT J NEXT I PRINT TAB(-1,24); PRINT TAB(12,8); " AM-1092 "; PRINT TAB(14,18); " "; PRINT TAB(-1,23); RETURN PRINT'DISK: FOR I = 17 TO 19 PRINT TAB(I,1); FOR J = 1 TO 23 PRINT TAB(-1,49); NEXT J NEXT I PRINT TAB(-1,24); PRINT TAB(18,8); " DISK "; PRINT TAB(-1,23); RETURN PRINT'BUS: FOR I = 1 TO 22 STEP 2 PRINT TAB(15,I); TAB(-1,45); TAB(-1,46); NEXT I PRINT TAB(-1,45); RETURN PRINT'CPU: FOR I = 10 TO 14 PRINT TAB(I,1); TAB(-1,47); NEXT I PRINT TAB(-1,24); PRINT TAB(11,1); "C"; PRINT TAB(12,1); "P"; PRINT TAB(13,1); "U"; PRINT TAB(-1,23); RETURN PRINT'MEM1: FOR I = 10 TO 14 PRINT TAB(I,3); TAB(-1,47); NEXT I PRINT TAB(-1,24); PRINT TAB(11,3); "M"; PRINT TAB(12,3); "E"; PRINT TAB(13,3); "M"; PRINT TAB(-1,23); RETURN PRINT'MEM2: FOR I = 10 TO 14 PRINT TAB(I,5); TAB(-1,47); NEXT I PRINT TAB(-1,24); PRINT TAB(11,5); "M"; PRINT TAB(12,5); "E"; PRINT TAB(13,5); "M"; PRINT TAB(-1,23); RETURN PRINT'AM415: FOR I = 10 TO 14 PRINT TAB(I,7); TAB(-1,47); NEXT I PRINT TAB(-1,24); PRINT TAB(11,7); "4"; PRINT TAB(12,7); "1"; PRINT TAB(13,7); "5"; PRINT TAB(-1,23); RETURN PRINT'VCR: FOR I = 10 TO 14 PRINT TAB(I,9); TAB(-1,47); NEXT I PRINT TAB(-1,24); PRINT TAB(11,9); "6"; PRINT TAB(12,9); "1"; PRINT TAB(13,9); "0"; PRINT TAB(-1,23); RETURN PRINT'AM600: FOR I = 10 TO 14 PRINT TAB(I,11); TAB(-1,47); NEXT I PRINT TAB(-1,24); PRINT TAB(11,11); "6"; PRINT TAB(12,11); "0"; PRINT TAB(13,11); "0"; PRINT TAB(-1,23); RETURN PRINT'TAPE: FOR I = 6 TO 8 PRINT TAB(I,1); FOR J = 1 TO 23 PRINT TAB(-1,49); NEXT J NEXT I PRINT TAB(-1,24); PRINT TAB(7,8); " TAPE "; PRINT TAB(-1,23); RETURN PRINT'AM316: FOR I = 10 TO 14 PRINT TAB(I,13); TAB(-1,47); NEXT I PRINT TAB(-1,24); PRINT TAB(11,13); "3"; PRINT TAB(12,13); "1"; PRINT TAB(13,13); "6"; PRINT TAB(-1,23); RETURN PRINT'TERM: PRINT TAB(-1,23); PRINT TAB(6,30); TAB(-1,38); FOR I = 1 TO 15 : PRINT TAB(-1,46); : NEXT I PRINT TAB(-1,39); FOR I = 7 TO 11 PRINT TAB(I,30); TAB(-1,47); TAB(I,46); TAB(-1,47); PRINT TAB(I,45); TAB(-1,33); TAB(I,31); TAB(-1,32); NEXT I PRINT TAB(12,30); TAB(-1,40); FOR I = 1 TO 15 : PRINT TAB(-1,46); : NEXT I PRINT TAB(-1,41); PRINT TAB(13,29); TAB(-1,40); FOR I = 1 TO 17 : PRINT TAB(-1,46); : NEXT I PRINT TAB(-1,41); PRINT TAB(12,29); TAB(-1,38); TAB(12,47); TAB(-1,39); PRINT TAB(-1,23); RETURN WAIT: FOR I = 1 TO 1500 NEXT I RETURN