 sttl Memory Examine Command
 pag
*
* Examine memory (system)
*
examine
 bsr getadr get low address
 bcs exam99
 std lowadr save low limit
 lda #'-
 jsr outch
 bsr getadr get high address
 bcs exam99
 std hiadr save high limit
*
* Print one line (16 bytes) of data
*
exam10 bsr pcrlf start a new print line
 lda lowadr print address
 jsr hexbyt
 lda lowadr+1
 jsr hexbyt
 jsr outsp
 jsr outsp
 ldx lowadr
 ldb #16 print 16 bytes
 pshs b
exam20 lda ,x+ get next byte to print
 jsr hexbyt
 jsr outsp
 dec 0,s done?
 bne exam20 no - go back
 ldx lowadr now print characters
 jsr outsp
 jsr outsp
 ldb #16
 stb 0,s
exam30 lda ,x+ get next byte
 cmpa #$20 printable?
 blo exam35 no
 cmpa #$7F
 blo exam40 go print character
exam35 lda #'. print period for unprintable
exam40 jsr outch print character
 dec 0,s done?
 bne exam30
 leas 1,s clean up stack
 jsr inchck abort if character struck
 bcs exam99
 stx lowadr update address
 cmpx hiadr any more?
 bls exam10 yes - go to it
exam99 bsr pcrlf
 rts
*
* pcrlf - print carriage return/line feed
*
pcrlf pshs d,x save registers
 ldx #CRLF carriage return/line feed string
 jsr pdata
 puls d,x,pc return
CRLF fcb $0D,$00

*
* get 4 hex digit address
*   return value in D
*
getadr ldb #4 number of digits
 pshs b
 ldd #0 starting value
 pshs d
getad1 bsr gethex get a hex digit (in B)
 bcs getad9 jump if error
 pshs a
 ldd 1,s fix up value
 aslb
 rola
 aslb
 rola
 aslb
 rola
 aslb
 rola
 orb ,s+
 std ,s
 dec 2,s done?
 bne getad1
 clc
getad9 puls d get value
 leas 1,s clean up stack
 rts return

*
* gethex - get one hex digit
*
gethex jsr inch read character
 cmpa #'0 check for legal digit
 blo gethx9
 cmpa #'9
 bls gethx1
 cmpa #'A legal digit?
 blo gethx9 no - error
 cmpa #'F
 bhi gethx9
 adda #9 add bias
gethx1 anda #$0F strip ASCII stuff
 clc
 rts all done - no error
gethx9 sec illegal
 rts exit
