; ************************** AMUS Program Label ******************************
; Filename: BYTE.M68 Date: 01/23/90
; Category: UTIL Hash Code: 525-467-332-132 Version: 1.0(101)
; Initials: ULTR/AM Name: DAVID PALLMANN
; Company: ULTRASOFT CORPORATION Telephone #: 5163484848
; Related Files:
; Min. Op. Sys.: AMOSL 1.3B Expertise Level: BEG
; Special: Requires 2.0 assembler -- After assembly: .LNKLIT BYTE
; Description: Byte conversion utility & dynamic ASCII/ISO Latin I character
; set chart. Useful to programmers who need to do conversions (just about
; all of us at one time or another). A must for AM65 users in particular.
; ****************************************************************************
;****************************************************************************
;* *
;* BYTE *
;* Byte Conversion Utility *
;* *
;****************************************************************************
;Copyright (C) 1990 UltraSoft Corporation. All Rights Reserved.
;
;Written by: David Pallmann
;
;Edit History:
;1.0(100) 23-Jan-90 created. /DFP
;1.0(101) 23-Jan-90 fix descriptions (thanks Bob Currier). /DFP
VMAJOR =1
VMINOR =0
VSUB =0
VEDIT =101.
VWHO =0
AUTOEXTERN
SEARCH SYS
SEARCH SYSSYM
SEARCH TRM
;ASCII character defintions
$ESC =33 ; escape
;variables
.OFINI
.OFDEF ROW, 1 ; row number (1-8)
.OFDEF BYTE, 1 ; current value
.OFDEF POS, 1 ; relative position (0,2,4,...)
.OFDEF COL, 1 ; cursor column position
.OFDEF BYTTBL, 16. ; byte value table
.OFDEF BUFFER, 4 ; conversion buffer
.OFSIZ MEMSIZ
;macros
DEFINE CURSOR ROW,COL
MOVB ROW,D1
ROLW D1,#8.
MOVB COL,D1
TCRT
ENDM
DEFINE CRT N
MOVW #-1_8.+^D<N>,D1
TCRT
ENDM
DEFINE REPEAT COUNT,INSTR
MOV #COUNT,D0
1$$: INSTR
DEC D0
BNE 1$$
ENDM
;***********
;* START *
;***********
;Start of program
START: PHDR -1,0,PH$REE!PH$REU ; program header
GETIMP MEMSIZ,A5 ;
TRMRST D0 ;
ORW #T$DAT!T$ECS!T$XLT,D0 ;
TRMWST D0 ;
CALL SCREEN ; display the screen
CLRB ROW(A5) ; clear row
CALL GETVAL ;
MOVB #32.,POS(A5) ; start out in character column
;come here to get a new data line
NEWLIN: CALL PUTVAL ;
CMPB ROW(A5),#16. ;
BGE 10$
INCB ROW(A5) ; update row
CALL GETVAL ;
BR 20$ ;
10$: MOVB #1,ROW(A5) ;
CALL GETVAL ;
20$: CALL UPDATE ; clear out current data line
BR GETCOL ;
PRVLIN: CALL PUTVAL ;
CMPB ROW(A5),#1 ;
BLE 10$ ;
DECB ROW(A5) ;
CALL GETVAL ;
BR 20$ ;
10$: MOVB #16.,ROW(A5) ;
CALL GETVAL ;
20$: CALL UPDATE ;
;get column based on relative position
GETCOL: LEA A6,COLTBL ;
CLR D6 ;
MOVB POS(A5),D6 ;
ASR D6 ;
ADD D6,A6 ;
MOVB @A6,COL(A5) ;
;position cursor and get a character
POSITION:
MOV #5,D0 ;
ADDB ROW(A5),D0 ;
CURSOR D0,COL(A5) ;
CRT 28 ;
TIN ;
MOV D1,D0 ;
CRT 29 ;
MOV D0,D1 ;
EDIT: CMPB D1,#$ESC ;
JEQ QUIT ;
CMPB D1,#'M-'@ ;
JEQ NEWLIN ;
CMPB D1,#'J-'@ ;
JEQ NEWLIN ;
CMPB D1,#'K-'@ ;
JEQ PRVLIN ;
CMPB D1,#'H-'@ ;
JEQ BACKUP ;
CMPB D1,#'L-'@ ;
JEQ ADVANCE ;
CMPB D1,#'U-'@ ;
JEQ FAR.LEFT ;
CMPB D1,#'N-'@ ;
JEQ FAR.RIGHT ;
CMPB D1,#'A-'@ ;
JEQ PREV.WORD ;
CMPB D1,#'W-'@ ;
JEQ NEXT.WORD ;
CMPB D1,#'S-'@ ;
JEQ CHART ;
CMPB D1,#'R-'@ ;
JEQ PREV.SCREEN ;
CMPB D1,#'T-'@ ;
JEQ NEXT.SCREEN ;
CMPB D1,#'^-'@ ;
JEQ HOME ;
CMPB D1,#'E-'@ ;
JEQ ENDCHT ;
CMPB D1,#'? ;
JEQ HELP ;
CMPB D1,#'G-'@ ;
BNE JUMP ;
TIN ;
JUMP: CLRB D0 ;
MOVB POS(A5),D0 ;
MOVW JMPTBL[~D0],D0 ;
JMP JMPTBL[~D0] ;
DEFINE CASE LABEL=WORD LABEL-JMPTBL
JMPTBL: CASE BINARY8 ; 000
CASE BINARY7 ; 002
CASE BINARY6 ; 004
CASE BINARY5 ; 006
CASE BINARY4 ; 008
CASE BINARY3 ; 010
CASE BINARY2 ; 012
CASE BINARY1 ; 014
CASE OCTAL3 ; 016
CASE OCTAL2 ; 018
CASE OCTAL1 ; 020
CASE DECIMAL3 ; 022
CASE DECIMAL2 ; 024
CASE DECIMAL1 ; 026
CASE HEX2 ; 028
CASE HEX1 ; 030
CASE CHAR ; 032
BINARY8:
MOVB D1,D0 ;
MOVB BYTE(A5),D1 ;
AND #^B01111111,D1 ;
CMPB D0,#'0 ;
JEQ DIGIT ;
CMPB D0,#'1 ;
JNE POSITION ;
ORB #^B10000000,D1 ;
JMP DIGIT ;
BINARY7:
MOVB D1,D0 ;
MOVB BYTE(A5),D1 ;
AND #^B10111111,D1 ;
CMPB D0,#'0 ;
JEQ DIGIT ;
CMPB D0,#'1 ;
JNE POSITION ;
ORB #^B01000000,D1 ;
JMP DIGIT ;
BINARY6:
MOVB D1,D0 ;
MOVB BYTE(A5),D1 ;
AND #^B11011111,D1 ;
CMPB D0,#'0 ;
JEQ DIGIT ;
CMPB D0,#'1 ;
JNE POSITION ;
ORB #^B00100000,D1 ;
JMP DIGIT ;
BINARY5:
MOVB D1,D0 ;
MOVB BYTE(A5),D1 ;
AND #^B11101111,D1 ;
CMPB D0,#'0 ;
JEQ DIGIT ;
CMPB D0,#'1 ;
JNE POSITION ;
ORB #^B00010000,D1 ;
JMP DIGIT ;
BINARY4:
MOVB D1,D0 ;
MOVB BYTE(A5),D1 ;
AND #^B11110111,D1 ;
CMPB D0,#'0 ;
JEQ DIGIT ;
CMPB D0,#'1 ;
JNE POSITION ;
ORB #^B00001000,D1 ;
JMP DIGIT ;
BINARY3:
MOVB D1,D0 ;
MOVB BYTE(A5),D1 ;
AND #^B11111011,D1 ;
CMPB D0,#'0 ;
JEQ DIGIT ;
CMPB D0,#'1 ;
JNE POSITION ;
ORB #^B00000100,D1 ;
JMP DIGIT ;
BINARY2:
MOVB D1,D0 ;
MOVB BYTE(A5),D1 ;
AND #^B11111101,D1 ;
CMPB D0,#'0 ;
JEQ DIGIT ;
CMPB D0,#'1 ;
JNE POSITION ;
ORB #^B00000010,D1 ;
JMP DIGIT ;
BINARY1:
MOVB D1,D0 ;
MOVB BYTE(A5),D1 ;
AND #^B11111110,D1 ;
CMPB D0,#'0 ;
BEQ 10$ ;
CMPB D0,#'1 ;
JNE POSITION ;
ORB #^B00000001,D1 ;
10$: MOVB D1,BYTE(A5) ;
CALL UPDATE ;
CLRW POS(A5) ;
JMP NEWLIN ;
OCTAL3: MOVB D1,D0 ;
MOVB BYTE(A5),D1 ;
AND #^B00111111,D1 ;
CMPB D0,#'0 ;
JLO POSITION ;
CMPB D0,#'7 ;
JHI POSITION ;
SUBB #'0,D0 ;
ROL D0,#6 ;
ADDB D0,D1 ;
JMP DIGIT ;
OCTAL2: MOVB D1,D0 ;
MOVB BYTE(A5),D1 ;
AND #^B11000111,D1 ;
CMPB D0,#'0 ;
JLO POSITION ;
CMPB D0,#'7 ;
JHI POSITION ;
SUBB #'0,D0 ;
ROL D0,#3 ;
ADDB D0,D1 ;
JMP DIGIT ;
OCTAL1: MOVB D1,D0 ;
MOVB BYTE(A5),D1 ;
AND #^B11111000,D1 ;
CMPB D0,#'0 ;
JLO POSITION ;
CMPB D0,#'7 ;
JHI POSITION ;
SUBB #'0,D0 ;
ADDB D0,D1 ;
MOVB D1,BYTE(A5) ;
CALL UPDATE ;
MOVB #16.,POS(A5) ;
JMP NEWLIN ;
DECIMAL3:
CMPB D1,#'0 ;
JLO POSITION ;
CMPB D1,#'9 ;
JHI POSITION ;
MOVB D1,D0 ;
CLR D1 ;
MOVB BYTE(A5),D1 ;
LEA A2,BUFFER(A5) ;
DCVT 3,OT$MEM ;
CLRB @A2 ;
CLRB BUFFER(A5) ;
ADDB D0,BUFFER(A5) ;
LEA A2,BUFFER(A5) ;
GTDEC ;
JMP DIGIT ;
DECIMAL2:
CMPB D1,#'0 ;
JLO POSITION ;
CMPB D1,#'9 ;
JHI POSITION ;
MOVB D1,D0 ;
CLR D1 ;
MOVB BYTE(A5),D1 ;
LEA A2,BUFFER(A5) ;
DCVT 3,OT$MEM ;
CLRB @A2 ;
CLRB BUFFER+1(A5) ;
ADDB D0,BUFFER+1(A5) ;
LEA A2,BUFFER(A5) ;
GTDEC ;
JMP DIGIT ;
DECIMAL1:
CMPB D1,#'0 ;
JLO POSITION ;
CMPB D1,#'9 ;
JHI POSITION ;
MOVB D1,D0 ;
CLR D1 ;
MOVB BYTE(A5),D1 ;
LEA A2,BUFFER(A5) ;
DCVT 3,OT$MEM ;
CLRB @A2 ;
CLRB BUFFER+2(A5) ;
ADDB D0,BUFFER+2(A5) ;
LEA A2,BUFFER(A5) ;
GTDEC ;
MOVB D1,BYTE(A5) ;
CALL UPDATE ;
MOVB #22.,POS(A5) ;
JMP NEWLIN ;
HEX2: UCS ;
MOVB D1,D0 ;
MOVB BYTE(A5),D1 ;
AND #^B00001111,D1 ;
CMPB D0,#'A ;
BLO 10$ ;
CMPB D0,#'F ;
BHI 10$ ;
SUBB #'A,D0 ;
ADDB #10.,D0 ;
BR 20$ ;
10$: CMPB D0,#'0 ;
JLO POSITION ;
CMPB D0,#'7 ;
JHI POSITION ;
SUBB #'0,D0 ;
20$: ROL D0,#4 ;
ADDB D0,D1 ;
JMP DIGIT ;
HEX1: UCS ;
MOVB D1,D0 ;
MOVB BYTE(A5),D1 ;
AND #^B11110000,D1 ;
CMPB D0,#'A ;
BLO 10$
CMPB D0,#'F ;
BHI 10$ ;
SUBB #'A,D0 ;
ADDB #10.,D0 ;
BR 20$ ;
10$: CMPB D0,#'0 ;
JLO POSITION ;
CMPB D0,#'7 ;
JHI POSITION ;
SUBB #'0,D0 ;
20$: ADDB D0,D1 ;
MOVB D1,BYTE(A5) ;
CALL UPDATE ;
MOVB #28.,POS(A5) ;
JMP NEWLIN ;
DIGIT: MOVB D1,BYTE(A5) ;
ADDB #2,POS(A5) ;
CALL PUTVAL ;
CALL UPDATE ;
JMP GETCOL ;
CHAR: MOVB D1,BYTE(A5) ;
CALL PUTVAL ;
CALL UPDATE ;
JMP NEWLIN ;
;move left one cursor position
BACKUP: TSTB POS(A5) ;
BNE 10$ ;
MOVB #32.,POS(A5) ;
BR 20$ ;
10$: SUBB #2,POS(A5) ;
20$: JMP GETCOL ;
;move right one cursor position
ADVANCE:
ADDB #2,POS(A5) ;
CMPB POS(A5),#32. ;
BLOS 10$ ;
CLRB POS(A5) ;
10$: JMP GETCOL ;
;move to far left cursor position
FAR.LEFT:
CLRB POS(A5) ;
JMP GETCOL ;
;move to far right cursor position
FAR.RIGHT:
MOVB #32.,POS(A5) ;
JMP GETCOL ;
;move "word" back
PREV.WORD:
TSTB POS(A5) ;
BNE 10$ ;
MOVB #32.,POS(A5) ;
JMP GETCOL ;
10$: LEA A6,COLTBL ;
CLR D6 ;
MOVB POS(A5),D6 ;
ASR D6 ;
ADD D6,A6 ;
MOVB @A6,D6 ;
20$: DECB D6 ;
SUBB #2,POS(A5) ;
JEQ FAR.LEFT ;
MOVB -(A6),D7 ;
CMPB D6,D7 ;
BEQ 20$ ;
MOVB D7,D6 ;
30$: DECB D6 ;
MOVB -(A6),D7 ;
CMPB D6,D7 ;
JNE GETCOL ;
SUBB #2,POS(A5) ;
BR 30$ ;
;move "word" forward
NEXT.WORD:
LEA A6,COLTBL ;
CLR D6 ;
MOVB POS(A5),D6 ;
ASR D6 ;
ADD D6,A6 ;
MOVB (A6)+,D6 ;
10$: INCB D6 ;
ADDB #2,POS(A5) ;
MOVB (A6)+,D7 ;
BEQ FAR.LEFT ;
CMPB D6,D7 ;
BEQ 10$ ;
JMP GETCOL ;
;**********
;* HOME *
;**********
;Home - display first page of ISO Latin I character set chart
HOME: CALL PUTVAL ;
MOVB #1,ROW(A5) ;
CALL GETVAL ;
CLRB BYTE(A5) ;
CALL PUTVAL ;
BR CHART ;
;************
;* ENDCHT *
;************
;End of chart - display last page of ISO Latin I character set chart
ENDCHT: CALL PUTVAL ;
MOVB #1,ROW(A5) ;
CALL GETVAL ;
MOVB #255.-15.,BYTE(A5) ;
CALL PUTVAL ;
BR CHART ;
;*****************
;* PREV.SCREEN *
;*****************
;Show previous screen of ISO Latin I character set chart
PREV.SCREEN:
CALL PUTVAL ;
MOVB #1,ROW(A5) ;
CALL GETVAL ;
SUBB #16.,BYTE(A5) ;
CALL PUTVAL ;
BR CHART ;
;*****************
;* NEXT.SCREEN *
;*****************
;Show next screen of ISO Latin I character set chart
NEXT.SCREEN:
CALL PUTVAL ;
MOVB #1,ROW(A5) ;
CALL GETVAL ;
ADDB #16.,BYTE(A5) ;
CALL PUTVAL ;
; fall through
;***********
;* CHART *
;***********
;Display section of ISO Latin I character set chart centered around
;current position and value
CHART: LEA A0,BYTTBL(A5) ;
CLR D6 ;
MOVB ROW(A5),D6 ;
DEC D6 ;
ADD D6,A0 ;
MOVB ROW(A5),D0 ;
10$: DECB D0 ;
BEQ 12$ ;
MOVB @A0,D7 ;
DECB D7 ;
MOVB D7,-(A0) ;
BR 10$ ;
12$: LEA A0,BYTTBL(A5) ;
CLR D6 ;
MOVB ROW(A5),D6 ;
DEC D6 ;
ADD D6,A0 ;
MOVB ROW(A5),D0 ;
20$: INCB D0 ;
CMPB D0,#16. ;
BHI 22$ ;
MOVB @A0,D7 ;
INCB D7 ;
MOVB D7,1(A0) ;
INC A0 ;
BR 20$ ;
22$: CALL SHOW.LINES ;
JMP POSITION ;
;**********
;* HELP *
;**********
;Display help screen
HELP: CRT 23 ;
CURSOR #3,#21. ;
CRT 46 ;
CURSOR #3,#27. ;
CRT 46 ;
CURSOR #3,#33. ;
CRT 46 ;
CURSOR #3,#39. ;
CRT 46 ;
CURSOR #3,#44. ;
CRT 46 ;
CURSOR #5,#10. ;
CRT 47 ;
CURSOR #5,#70. ;
CRT 47 ;
CURSOR #22.,#21. ;
CRT 46 ;
CURSOR #22.,#27. ;
CRT 46 ;
CURSOR #22.,#33. ;
CRT 46 ;
CURSOR #22.,#39. ;
CRT 46 ;
CURSOR #22.,#44. ;
CRT 46 ;
CRT 24 ;
CURSOR #4,#11. ;
TYPE < The BYTE utility is a living conversion table. To obtain >
CURSOR #5,#11. ;
TYPE < a conversion, simply move the cursor to the appropriate >
CURSOR #6,#11. ;
TYPE < column using the left or right arrow keys, and then enter >
CURSOR #7,#11. ;
TYPE < a value. As you type, all of the other columns update >
CURSOR #8.,#11. ;
TYPE < dynamically. Press RETURN, down arrow, or up arrow to >
CURSOR #9.,#11. ;
TYPE < move up or down a line at a time. >
CURSOR #10.,#11. ;
TYPE < >
CURSOR #11.,#11. ;
TYPE < BYTE supports the ISO Latin I character set, a superset >
CURSOR #12.,#11. ;
TYPE < of ASCII. Source: UltraSoft Corporation (516) 348-4848. >
CURSOR #13.,#11. ;
TYPE < >
CURSOR #14.,#11. ;
TYPE < To enter a character that BYTE normally responds to (ESC, >
CURSOR #15.,#11. ;
TYPE < for example), press Control-G and then the character. >
CURSOR #16.,#11. ;
TYPE < >
CURSOR #17.,#11. ;
TYPE < ADDITIONAL COMMANDS >
CURSOR #18.,#11. ;
TYPE < ESC - exit to AMOS ? - help >
CURSOR #19.,#11. ;
TYPE < ^S - fill out table ^A - field left ^W - field right >
CURSOR #20.,#11. ;
TYPE < ^^ - top of chart ^U - far left ^N - far right >
CURSOR #21.,#11. ;
TYPE < ^E - end of chart ^R - page back ^T - page forward >
TIN ;
CALL SCREEN ;
CALL SHOW.LINES ;
JMP POSITION ;
;************
;* UPDATE *
;************
;Function: Update values on current line
;
;Inputs: BYTE(A5) - current value
UPDATE: SAVE A0,D0,D5 ;
MOV #5,D5 ;
ADDB ROW(A5),D5 ;
;binary
UP.BIN: CURSOR D5,#12. ;
CLR D0 ;
MOVB BYTE(A5),D0 ;
MOV #8.,D2 ;
10$: ASLB D0 ;
BCC 20$ ;
TYPE 1 ;
BR 30$ ;
20$: TYPE 0 ;
30$: SOB D2,10$ ;
;octal
UP.OCT: CURSOR D5,#23. ;
JOBIDX ;
ANDW #^C<J.HEX>,JOBTYP(A6) ;
CLR D1 ;
MOVB BYTE(A5),D1 ;
OCVT 3,OT$TRM ;
;decimal
UP.DEC: CURSOR D5,#29. ;
CLR D1 ;
MOVB BYTE(A5),D1 ;
DCVT 3,OT$TRM ;
;hexadecimal
UP.HEX: CURSOR D5,#36. ;
JOBIDX ;
ORW #J.HEX,JOBTYP(A6) ;
CLR D1 ;
MOVB BYTE(A5),D1 ;
OCVT 2,OT$TRM ;
;output character image
UP.CHR: CURSOR D5,#41. ;
MOVB BYTE(A5),D1 ;
CMPB D1,#40 ;
BLO UP.CHC ;
CMPB D1,#'~ ;
BLOS UP.CHP ;
CMPB D1,#240 ;
BLO UP.CHN ;
UP.CHP: TYPESP ;
TTY ;
BR UP.DSC ;
UP.CHC: TYPE ^ ;
ADDB #'@,D1 ;
TTY ;
BR UP.DSC ;
UP.CHN: TYPE < > ;
;output character description
UP.DSC: CURSOR D5,#46. ;
LEA A0,DSCTBL ;
CLR D0 ;
MOVB BYTE(A5),D0 ;
BEQ 20$ ;
10$: TSTB (A0)+ ;
BNE 10$ ;
SOB D0,10$ ;
20$: MOV #23.,D2 ;
30$: MOVB (A0)+,D1 ;
BEQ 40$ ;
TTY ;
DEC D2 ;
BR 30$ ;
40$: TST D2 ;
BLE 60$ ;
50$: TYPE < > ;
SOB D2,50$ ;
60$:
;return
UP.RTN: REST A0,D0,D5 ;
RTN ;
;**********
;* QUIT *
;**********
;Exit program
QUIT: CURSOR #23.,#1 ;
CRT 9 ;
CURSOR #24.,#1 ;
CRT 9 ;
CRT 12 ;
CRT 28 ;
EXIT ;
;***********
;* CLEAR *
;***********
;Function: Clear current data line
CLEAR: SAVE D0 ;
MOV #5,D0 ;
ADDB ROW(A5),D0 ;
CURSOR D0,#12. ;
TYPE 00000000 ;
CLRB BYTE(A5) ;
CURSOR D0,#23. ;
TYPE 000 ;
CURSOR D0,#29. ;
TYPE 000 ;
CURSOR D0,#35. ;
TYPE $00 ;
CURSOR D0,#41. ;
TYPE <^@> ;
CURSOR D0,#46. ;
TYPE <Null >
REST D0 ;
RTN ;
;************
;* SCREEN *
;************
;Function: Put up display screen
SCREEN: CRT 29 ; turn off cursor
CRT 0 ; clear screen
CRT 12 ; high intensity
CURSOR #1,#55. ; reverse video banner
CRT 33 ;
CURSOR #1,#27. ;
CRT 32 ;
TYPE < Byte Conversion Utility >
CRT 33 ;
CRT 11 ; low intensity
CURSOR #1,#1 ; output
user name
JOBIDX ;
TTYL JOBUSN(A6) ;
CURSOR #1,#63. ; output date and time
CLR D3 ;
CLR D4 ;
CLR D5 ;
MOV #0,A2 ;
CALL $ODTIM ;
CRT 12 ; high intensity
CRT 23 ; enable alternate character set
;top of grid
CURSOR #3,#10. ;
CRT 38 ; top left corner
REPEAT 10.,<CRT 46> ; line over "Binary"
CRT 42 ; top intersect
REPEAT 5,<CRT 46> ; line over "Oct"
CRT 42 ; top intersect
REPEAT 5,<CRT 46> ; line over "Dec"
CRT 42 ; top intersect
REPEAT 5,<CRT 46> ; line over "Hex"
CRT 42 ; top intersect
REPEAT 4,<CRT 46> ; line over "Ch"
CRT 42 ; top intersect
REPEAT 25.,<CRT 46> ; line over "Description"
CRT 39 ; top right corner
;label line of grid
CURSOR #4,#10. ;
CRT 47 ; vertical line
CRT 24 ;
TYPE < Binary > ;
CRT 23 ;
CRT 47 ;
CRT 24 ;
TYPE < Oct > ;
CRT 23 ;
CRT 47 ;
CRT 24 ;
TYPE < Dec > ;
CRT 23 ;
CRT 47 ;
CRT 24 ;
TYPE < Hex > ;
CRT 23 ;
CRT 47 ;
CRT 24 ;
TYPE < Ch > ;
CRT 23 ;
CRT 47 ;
CRT 24 ;
TYPE < Description >
CRT 23 ;
CRT 47 ;
;lines under labels
CURSOR #5,#10. ;
CRT 44 ; left intersect
REPEAT 10.,<CRT 46> ; line over "Binary"
CRT 48 ; center intersect
REPEAT 5,<CRT 46> ; line over "Oct"
CRT 48 ; center intersect
REPEAT 5,<CRT 46> ; line over "Dec"
CRT 48 ; center intersect
REPEAT 5,<CRT 46> ; line over "Hex"
CRT 48 ; center intersect
REPEAT 4,<CRT 46> ; line over "Ch"
CRT 48 ; center intersect
REPEAT 25.,<CRT 46> ; line over "Description"
CRT 43 ; right intersect
;data lines
MOV #6,D0 ;
MOV #16.,D2 ;
10$: CURSOR D0,#10. ;
CRT 47 ; vertical line
CURSOR D0,#21. ;
CRT 47 ;
CURSOR D0,#27. ;
CRT 47 ;
CURSOR D0,#33. ;
CRT 47 ;
CURSOR D0,#39. ;
CRT 47 ;
CURSOR D0,#44. ;
CRT 47 ;
CURSOR D0,#70. ;
CRT 47 ;
INCW D0 ;
SOB D2,10$ ;
;bottom of grid
CURSOR #22.,#10. ;
CRT 40 ; bottom left corner
REPEAT 10.,<CRT 46> ; line under "Binary"
CRT 45 ; bottom intersect
REPEAT 5,<CRT 46> ; line under "Oct"
CRT 45 ; bottom intersect
REPEAT 5,<CRT 46> ; line under "Dec"
CRT 45 ; bottom intersect
REPEAT 5,<CRT 46> ; line under "Hex"
CRT 45 ; bottom intersect
REPEAT 4,<CRT 46> ; line under "Ch"
CRT 45 ; bottom intersect
REPEAT 25.,<CRT 46> ; line under "Description"
CRT 41 ; bottom right corner
CRT 24 ; turn off alternate character set
CURSOR #23.,#30. ;
TYPE [ Press ? for help ] ;
CURSOR #24.,#21. ;
TYPE [ Press ESCAPE to leave this screen ]
RTN ;
;****************
;* SHOW.LINES *
;****************
;Function: Show value of all data lines
SHOW.LINES:
PUSHB ROW(A5) ;
PUSHB BYTE(A5) ;
LEA A0,BYTTBL(A5) ;
MOVB #1,ROW(A5) ;
30$: MOVB (A0)+,BYTE(A5) ;
CALL UPDATE ;
INCB ROW(A5) ;
CMPB ROW(A5),#16. ;
BLE 30$ ;
POPB BYTE(A5) ;
POPB ROW(A5) ;
RTN ;
;************
;* GETVAL *
;************
;Function: Get current data line value from table
;
;Inputs: BYTTBL(A5) - byte table
; ROW(A5) - row (1-16)
;
;Outputs: BYTE(A5) - value for current row
GETVAL: CLR D6 ;
MOVB ROW(A5),D6 ;
DEC D6 ;
LEA A6,BYTTBL(A5) ;
ADD D6,A6 ;
MOVB @A6,BYTE(A5) ;
RTN ;
;************
;* PUTCAL *
;************
;Function: Put current byte into data line value table
;
;Inputs: BYTE(A5) - byte
; ROW(A5) - row (1-16)
;
;Outputs: BYTTBL(A5) - updated
PUTVAL: CLR D6 ;
MOVB ROW(A5),D6 ;
DEC D6 ;
LEA A6,BYTTBL(A5) ;
ADD D6,A6 ;
MOVB BYTE(A5),@A6 ;
RTN ;
;************
;* COLTBL *
;************
;table of column positions
BYTE 0 ; ** start of table marker **
COLTBL: BYTE 12. ; 000 binary 8
BYTE 13. ; 002 binary 7
BYTE 14. ; 004 binary 6
BYTE 15. ; 006 binary 5
BYTE 16. ; 008 binary 4
BYTE 17. ; 010 binary 3
BYTE 18. ; 012 binary 2
BYTE 19. ; 014 binary 1
BYTE 23. ; 016 octal 3
BYTE 24. ; 018 octal 2
BYTE 25. ; 020 octal 1
BYTE 29. ; 022 decimal 3
BYTE 30. ; 024 decimal 2
BYTE 31. ; 026 decimal 1
BYTE 36. ; 028 hex 2
BYTE 37. ; 030 hex 1
BYTE 42. ; 032 char 1
BYTE 0 ; ** end of table **
;************
;* DSCTBL *
;************
;table of character descriptions
DSCTBL: ASCIZ "Null" ; 000
ASCIZ "Start of Heading" ; 001
ASCIZ "Start of Text" ; 002
ASCIZ "End of Text" ; 003
ASCIZ "End of Transmission" ; 004
ASCIZ "Enquiry" ; 005
ASCIZ "Acknowledge" ; 006
ASCIZ "Bell" ; 007
ASCIZ "Backspace" ; 008
ASCIZ "Horizontal Tab" ; 009
ASCIZ "Line Feed" ; 010
ASCIZ "Vertical Tab" ; 011
ASCIZ "Form Feed" ; 012
ASCIZ "Carriage Return" ; 013
ASCIZ "Shift Out" ; 014
ASCIZ "Shift In" ; 015
ASCIZ "Data Link Escape" ; 016
ASCIZ "Device Control 1" ; 017
ASCIZ "Device Control 2" ; 018
ASCIZ "Device Control 3" ; 019
ASCIZ "Device Control 4" ; 020
ASCIZ "Negative Acknowledge" ; 021
ASCIZ "Synchronous Idle" ; 022
ASCIZ "End Transmission Blocks" ; 023
ASCIZ "Cancel" ; 024
ASCIZ "End of Medium" ; 025
ASCIZ "Special Sequence" ; 026
ASCIZ "Escape" ; 027
ASCIZ "File Separator" ; 028
ASCIZ "Group Separator" ; 029
ASCIZ "Record Sepatator" ; 030
ASCIZ "Unit Separator" ; 031
ASCIZ "Space" ; 032
ASCIZ "Exclamation Mark" ; 033
ASCIZ "Quotation Mark" ; 034
ASCIZ "Number Sign" ; 035
ASCIZ "Dollar Sign" ; 036
ASCIZ "Percent Sign" ; 037
ASCIZ "Ampersand" ; 038
ASCIZ "Apostrophe" ; 039
ASCIZ "Opening Parenthesis" ; 040
ASCIZ "Closing Parenthesis" ; 041
ASCIZ "Asterisk" ; 042
ASCIZ "Plus" ; 043
ASCIZ "Comma" ; 044
ASCIZ "Dash or Minus" ; 045
ASCIZ "Period" ; 046
ASCIZ "Slash" ; 047
ASCIZ "Zero" ; 048
ASCIZ "One" ; 049
ASCIZ "Two" ; 050
ASCIZ "Three" ; 051
ASCIZ "Four" ; 052
ASCIZ "Five" ; 053
ASCIZ "Six" ; 054
ASCIZ "Seven" ; 055
ASCIZ "Eight" ; 056
ASCIZ "Nine" ; 057
ASCIZ "Colon" ; 058
ASCIZ "Semicolon" ; 059
ASCIZ "Left Angle Bracket" ; 060
ASCIZ "Equal Sign" ; 061
ASCIZ "Right Angle Bracket" ; 062
ASCIZ "Question Mark" ; 063
ASCIZ "Commerical At" ; 064
ASCIZ "Upper case A" ; 065
ASCIZ "Upper case B" ; 066
ASCIZ "Upper case C" ; 067
ASCIZ "Upper case D" ; 068
ASCIZ "Upper case E" ; 069
ASCIZ "Upper case F" ; 070
ASCIZ "Upper case G" ; 071
ASCIZ "Upper case H" ; 072
ASCIZ "Upper case I" ; 073
ASCIZ "Upper case J" ; 074
ASCIZ "Upper case K" ; 075
ASCIZ "Upper case L" ; 076
ASCIZ "Upper case M" ; 077
ASCIZ "Upper case N" ; 078
ASCIZ "Upper case O" ; 079
ASCIZ "Upper case P" ; 080
ASCIZ "Upper case Q" ; 081
ASCIZ "Upper case R" ; 082
ASCIZ "Upper case S" ; 083
ASCIZ "Upper case T" ; 084
ASCIZ "Upper case U" ; 085
ASCIZ "Upper case V" ; 086
ASCIZ "Upper case W" ; 087
ASCIZ "Upper case X" ; 088
ASCIZ "Upper case Y" ; 089
ASCIZ "Upper case Z" ; 090
ASCIZ "Left Square Bracket" ; 091
ASCIZ "Backslash" ; 092
ASCIZ "Right Square Bracket" ; 093
ASCIZ "Circumflex" ; 094
ASCIZ "Underscore" ; 095
ASCIZ "Grave Accent" ; 096
ASCIZ "Lower case a" ; 097
ASCIZ "Lower case b" ; 098
ASCIZ "Lower case c" ; 099
ASCIZ "Lower case d" ; 100
ASCIZ "Lower case e" ; 101
ASCIZ "Lower case f" ; 102
ASCIZ "Lower case g" ; 103
ASCIZ "Lower case h" ; 104
ASCIZ "Lower case i" ; 105
ASCIZ "Lower case j" ; 106
ASCIZ "Lower case k" ; 107
ASCIZ "Lower case l" ; 108
ASCIZ "Lower case m" ; 109
ASCIZ "Lower case n" ; 110
ASCIZ "Lower case o" ; 111
ASCIZ "Lower case p" ; 112
ASCIZ "Lower case q" ; 113
ASCIZ "Lower case r" ; 114
ASCIZ "Lower case s" ; 115
ASCIZ "Lower case t" ; 116
ASCIZ "Lower case u" ; 117
ASCIZ "Lower case v" ; 118
ASCIZ "Lower case w" ; 119
ASCIZ "Lower case x" ; 120
ASCIZ "Lower case y" ; 121
ASCIZ "Lower case z" ; 122
ASCIZ "Right Curly Brace" ; 123
ASCIZ "Vertical Bar" ; 124
ASCIZ "Left Curly Brace" ; 125
ASCIZ "Tilde" ; 126
ASCIZ "Del" ; 127
ASCIZ "ISO Upper Control-@" ; 128
ASCIZ "ISO Upper Control-A" ; 129
ASCIZ "ISO Upper Control-B" ; 130
ASCIZ "ISO Upper Control-C" ; 131
ASCIZ "ISO Upper Control-D" ; 132
ASCIZ "ISO Upper Control-E" ; 133
ASCIZ "ISO Upper Control-F" ; 134
ASCIZ "ISO Upper Control-G" ; 135
ASCIZ "ISO Upper Control-H" ; 136
ASCIZ "ISO Upper Control-I" ; 137
ASCIZ "ISO Upper Control-J" ; 138
ASCIZ "ISO Upper Control-K" ; 139
ASCIZ "ISO Upper Control-L" ; 140
ASCIZ "ISO Upper Control-M" ; 141
ASCIZ "ISO Upper Control-N" ; 142
ASCIZ "ISO Upper Control-O" ; 143
ASCIZ "ISO Upper Control-P" ; 144
ASCIZ "ISO Upper Control-Q" ; 145
ASCIZ "ISO Upper Control-R" ; 146
ASCIZ "ISO Upper Control-S" ; 147
ASCIZ "ISO Upper Control-T" ; 148
ASCIZ "ISO Upper Control-U" ; 149
ASCIZ "ISO Upper Control-V" ; 150
ASCIZ "ISO Upper Control-W" ; 151
ASCIZ "ISO Upper Control-X" ; 152
ASCIZ "ISO Upper Control-Y" ; 153
ASCIZ "ISO Upper Control-Z" ; 154
ASCIZ "ISO Upper Control-[" ; 155
ASCIZ "ISO Upper Control-\" ; 156
ASCIZ "ISO Upper Control-]" ; 157
ASCIZ "ISO Upper Control-^" ; 158
ASCIZ "ISO Upper Control-_" ; 159
ASCIZ "Required Space" ; 160
ASCIZ "Inverse Exclamation Mrk" ; 161
ASCIZ "Cents" ; 162
ASCIZ "Sterling" ; 163
ASCIZ "Currency" ; 164
ASCIZ "Yen" ; 165
ASCIZ "Split Bar" ; 166
ASCIZ "Section" ; 167
ASCIZ "Dieresis" ; 168
ASCIZ "Copyright" ; 169
ASCIZ "Ord Feminine" ; 170
ASCIZ "Opening Guillemets" ; 171
ASCIZ "Not" ; 172
ASCIZ "Discretionary Hyphen" ; 173
ASCIZ "Registered" ; 174
ASCIZ "Hyphen" ; 175
ASCIZ "Ring" ; 176
ASCIZ "Plus or Minus" ; 177
ASCIZ "2 superscript" ; 178
ASCIZ "3 superscript" ; 179
ASCIZ "Acute Accent" ; 180
ASCIZ "Micro" ; 181
ASCIZ "Paragraph" ; 182
ASCIZ "Bullet" ; 183
ASCIZ "Cedilla" ; 184
ASCIZ "1 superscript" ; 185
ASCIZ "Ord Masculine" ; 186
ASCIZ "Closing Guillemets" ; 187
ASCIZ "One-quarter" ; 188
ASCIZ "One-half" ; 189
ASCIZ "Three-quarters" ; 190
ASCIZ "Inverse question mark" ; 191
ASCIZ "Upper case A grave" ; 192
ASCIZ "Upper case A acute" ; 193
ASCIZ "Upper case A circumflex" ; 194
ASCIZ "Upper case A tilde" ; 195
ASCIZ "Upper case A umlaut" ; 196
ASCIZ "Upper case A ring" ; 197
ASCIZ "Upper case AE ligature" ; 198
ASCIZ "Upper case C cedilla" ; 199
ASCIZ "Upper case E grave" ; 200
ASCIZ "Upper case E acute" ; 201
ASCIZ "Upper case E circumflex" ; 202
ASCIZ "Upper case E dieresis" ; 203
ASCIZ "Upper case I grave" ; 204
ASCIZ "Upper case I acute" ; 205
ASCIZ "Upper case I circumflex" ; 206
ASCIZ "Upper case I dieresis" ; 207
ASCIZ "Upper case Eth" ; 208
ASCIZ "Upper case N tilde" ; 209
ASCIZ "Upper case O grave" ; 210
ASCIZ "Upper case O acute" ; 211
ASCIZ "Upper case O circumflex" ; 212
ASCIZ "Upper case O tilde" ; 213
ASCIZ "Upper case O umlaut" ; 214
ASCIZ "Times" ; 215
ASCIZ "Upper case O slash" ; 216
ASCIZ "Upper case U grave" ; 217
ASCIZ "Upper case U acute" ; 218
ASCIZ "Upper case U circumflex" ; 219
ASCIZ "Upper case U umlaut" ; 220
ASCIZ "Upper case Y acute" ; 221
ASCIZ "Upper case Thorn" ; 222
ASCIZ "Ess tset" ; 223
ASCIZ "Lower case A grave" ; 224
ASCIZ "Lower case A acute" ; 225
ASCIZ "Lower case A circumflex" ; 226
ASCIZ "Lower case A tilde" ; 227
ASCIZ "Lower case A umlaut" ; 228
ASCIZ "Lower case A ring" ; 229
ASCIZ "Lower case AE ligature" ; 230
ASCIZ "Lower case C cedilla" ; 231
ASCIZ "Lower case E grave" ; 232
ASCIZ "Lower case E acute" ; 233
ASCIZ "Lower case E circumflex" ; 234
ASCIZ "Lower case E dieresis" ; 235
ASCIZ "Lower case I grave" ; 236
ASCIZ "Lower case I acute" ; 237
ASCIZ "Lower case I circumflex" ; 238
ASCIZ "Lower case I umlaut" ; 239
ASCIZ "Lower case Eth" ; 240
ASCIZ "Lower case N tilde" ; 241
ASCIZ "Lower case O grave" ; 242
ASCIZ "Lower case O acute" ; 243
ASCIZ "Lower case O circumflex" ; 244
ASCIZ "Lower case O tilde" ; 245
ASCIZ "Lower case O umlaut" ; 246
ASCIZ "Division" ; 247
ASCIZ "Lower case O slash" ; 248
ASCIZ "Lower case U grave" ; 249
ASCIZ "Lower case U acute" ; 250
ASCIZ "Lower case U circumflex" ; 251
ASCIZ "Lower case U umlaut" ; 252
ASCIZ "Lower case Y acute" ; 253
ASCIZ "Lower case Thorn" ; 254
ASCIZ "Lower case Y umlaut" ; 255
BYTE 0 ; ** end of table **
EVEN ;
END