Compucolor.org – Virtual Media

Listing of file='SIMCHR.BAS;01' on disk='vmedia/analiz_watals-sector.ccvf'

1 REM  80 07 11 22:10 (C) 1980 C W HENNIG 
10 PLOT 6,2,12:PRINT "UNIVERSITY OF WATERLOO LANGUAGE LABS CHARACTER SIMULATOR

"
20 HM= 32940:T= PEEK (HM)+ PEEK (HM+ 1)* 256:IF  PEEK (T+ 1)+ PEEK (T+ 2)* 256= 2048 GOTO  40
30 T= T- 2050:HI= INT (T/ 256):LO= T- (HI* 256):POKE HM,LO:POKE HM+ 1,HI
40 CLEAR 500:HM= 32940:T= PEEK (HM)+ PEEK (HM+ 1)* 256:POKE  T+ 1,0:POKE T+ 2,8:REM  2048BYTES FOR SAVE
90 A= 6:B= 10:C0= 30:D= 2:E= 253:F= 29:Z= 255
100 TE= 0:OFFSET= 0:DA= T+ 3:REM  DATA AREA FOR .DAT FILE
120 DEF FN XY(CX)= PEEK (CX)+ PEEK (CX+ 1)* 256
160 DIM HX$(15)
200 RESTORE 620:FOR I= 0TO 15:READ HX$(I):NEXT
209 REM  IF NO FILE PRESS RETURN W/NO INPUT
210 INPUT "FILE NAME? ";T$:PLOT 28,11:IF T$= "0"OR T$= ""THEN FL$= "CHAR":AP= 1:GOTO 215
212 FL$= T$
215 GOSUB 11000
220 CXY= 33234:X0= 59:Y0= 60:RO= 0
240 PLOT 3,0,4,6,4:PRINT "CTRL Q=PRINT U=UPPER  D=LOWER, QUIT TO SAVE T+ CHAR=EDIT >      ";
260 PLOT F:XY= FN XY(CX):INPUT "";T$:C= PEEK (XY):PLOT F:GOSUB 3000
280 IF T$= "QUIT"THEN GOSUB 960:GOTO 480:REM  QUIT PROG & SAVE .ARY
290 IF LEFT$ (T$,1)= ""THEN  SWITCH= 1:REM  CTRL BLUE (T) FOR EDIT
295 IF LEFT$ (T$,1)= ""THEN OFFSET= 0:PLOT 3,0,2:PRINT "LOWER IS ACTIVE":REM  CTRL D = LOWER HALF OF FILE
297 IF LEFT$ (T$,1)= ""THEN OFFSET= 1024:PLOT 3,0,2:PRINT "UPPER IS ACTIVE":REM  CTRL U = UPPER HALF OF FILE
299 IF LEFT$ (T$,1)= ""THEN  SWITCH= 0:REM  CTRL Q=PRINT CHARACTER
300 R= C* 8+ OF+ DA:CH= 0:RO= 1:Y0= 60:REM  OFFSET=TOP OR BOTTOM HALF OF FILE
305 IF SW= 0THEN GOSUB 2000:GOTO 240
310 IF SW= 1THEN GOSUB 640:GOSUB 2000
320 PLOT 3,0,6,6,2:INPUT "N=NEXT CHR: +=NEXT ROW: T=-1ROW HEX# >    ";T$
340 IF T$= ""THEN R= R- 1:Y0= Y0+ 1:RO= RO- 1:GOSUB 690:GOTO 320:REM 
350 IF LEFT$ (T$,1)= "N"GOTO 240:REM  GET NEXT CHAR
355 IF LEFT$ (T$,1)= "+"THEN CH= PEEK (R):GOTO 410:REM  SKIP THIS ROW
360 IF T$= "0"THEN CH= 0:GOTO 400
370 IF T$= ""THEN CH= 0:GOTO 400
380 GOSUB 540:CHR= X:IF  APF= 1THEN AP= 0:GOTO 320
400 POKE  R,CH:REM  PUT CHAR IN .DAT AREA
410 GOSUB 640:REM  PLOT ROW
420 Y0= Y0- 1:IF Y0< 53THEN Y0= 60:REM  CHANGE PLOT ROW
440 ROW= RO+ 1:IF RO> 8THEN RO= 1:GOTO 240:REM  LAST ROW OF CHAR
460 R= R+ 1:CH= 0:GOTO 320:REM  UPDATE CHAR DATA POINTER
480 PLOT  6,2:END
500 Y= INT (X/ 256):GOSUB 520:Y= X- Y* 256:GOSUB 520:RETURN
520 Z= INT (Y/ 16):PRINT HX$(Z);:Z= Y- Z* 16:PRINT HX$(Z);:RETURN
540 X= 0:FOR Q= 1TO LEN (T$)
560 X= X* 16:A$= MID$ (T$,Q,1)
580 FOR RR= 0TO 15:IF HX$(RR)< > A$THEN NEXT RR:GOSUB 10000:CH= 0:APF= 1:GOTO 610
600 X= X+ RR:NEXT Q
610 RETURN
620 DATA 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
640 REM PLOT CHAR ROW
660 PLOT 3,2,16,6,4:PRINT "CHAR ";:IF CH< = 255THEN POKE FN XY(CX),C
680 PLOT 3,10,16,6,3:PRINT "ADDR."R- DA" ROW"RO"   "
690 PLOT 3,64,16:X0= 59
700 FOR I= 7TO 2STEP - 1:X0= X0+ 1:PLOT A,B,F,D,E,X0,Y0,Z:NEXT I:X0= 59
710 FOR I= 7TO 2STEP - 1:X0= X0+ 1:IF CHAND (2^ I)THEN PLOT A,B,C0,D,E,X0,Y0,Z
720 NEXT I
740 X0= 59
760 RETURN
960 REM  QUIT & SAVE ARRAY
980 PRINT "SAVE "FL$".DAT":SAVE  FL$+ ".DAT":RETURN
2000 REM  PLOT COMPLETE CHAR
2010 PLOT 3,64,16:X0= 59:Y0= 60
2020 R1= R:FOR H= 1TO 8:FOR I= 7TO 2STEP - 1:X0= X0+ 1:IF PEEK (R1)AND (D^ I)THEN PLOT A,B,C0,D,E,X0,Y0,Z:GOTO 2040
2040 NEXT I:X0= 59:R1= R1+ 1:Y0= Y0- 1:NEXT H
2060 X0= 59:Y0= 60:PLOT A,D:APF= 0
2080 RETURN
3000 REM  CLEAR PLOT AREA
3020 PLOT 3,64,16:X0= 57:Y0= 66
3030 PLOT A,B,F,D,E:FOR H= 1TO 16:X0= 58:FOR I= 1TO 12:PLOT X0+ I,Y0- H
3040 NEXT I:NEXT H:PLOT Z
3050 PLOT A,D
3053 Y0= 65:X0= 59
3054 FOR I= 7TO 2STEP - 1:X0= X0+ 1:PLOT A,B,C0,D,E:IF I= < 4THEN B= 10+ 64
3055 IF 85AND (2^ I)THEN PLOT X0,Y0
3056 IF 168AND (2^ I)THEN PLOT X0,Y0- 1
3057 PLOT 255:NEXT I:B= 10
3060 RETURN
10000 PRINT "INVALID CHARACTER. MUST BE A HEX VALUE. ":FOR  I= 0TO 1000:NEXT :PLOT 28,11:RETURN
11000 REM  LOAD .DATA FILE
11005 PRINT "INITIALIZING "FL$" DATA AREA
11010 IF AP= 0THEN  LOAD  FL$+ ".DAT":GOTO 11050
11020 FOR I= DA TO  DA+ 2047
11030 POKE  I,63
11040 NEXT I:AP= 0
11050 PLOT 28,11
11999 RETURN
12000 REM  HEX CONVERSION
12010 HX$= "":Y= INT (X/ 256):GOSUB  12050:Y= X- Y* 256:GOSUB  12050:RETURN
12050 Z= INT (Y/ 16):HX$= HX$+ HX$(Z):Z= Y- Z* 16:HX$= HX$+ HX$(Z):RETURN