; s-50 built in monitor

0103: A1000118	      ld R18,#0100
0107: 71DF10	      andb R10,#DF
010A: B30100D81A      ldb R1A,D800
010F: 99FE1A	      cmpb R1A,#FE  ; '0' pressed ?
0112: DF06	      je 011A
0114: B01A74	      ldb R74,R1A
0117: E75D04	      ljmp 0577

; monitor entry point
011A: FA	      di
011B: A1000118	      ld R18,#0100  ; sp to top of on chip memory
011F: B1FE74	      ldb R74,#FE
0122: 71DF10	      andb R10,#DF
0125: B1401A	      ldb R1A,#40
0128: C70100C01A      stb R1A,C000
012D: B1050E	      ldb R0E,#05   ; baud rate for midi
0130: B1800E	      ldb R0E,#80
0133: B10911	      ldb R11,#09   ; serial port mode 1
0136: B12016	      ldb R16,#20   ; enable transmit
0139: 710009	      andb R09,#00  ; disable all interupts
013C: B10008	      ldb R08,#00   ;
013F:
monloop: 2922	      scall getbyte ; get byte in $1a
0141: 992F1A	      cmpb R1A,#2F  ; '/' ?
0144: D702	      jne 0148
0146: 2033	      sjmp 017B
0148: 99521A	      cmpb R1A,#52  ; 'R'
014B: D702	      jne 014F
014D: 2035	      sjmp 0184
014F: 99571A	      cmpb R1A,#57  ; 'W'
0152: D702	      jne 0156
0154: 2058	      sjmp 01AE
0156: 99471A	      cmpb R1A,#47  ; 'G'
0159: D702	      jne 015D
015B: 2076	      sjmp 01D3
015D: 99FF1A	      cmpb R1A,#FF
0160: D702	      jne 0164
0162: 2085	      sjmp 01E9
0164: 994D1A	      cmpb R1A,#4D  ; M
0167: D702	      jne 016B
0169: 20DD	      sjmp 0248
016B: 99491A	      cmpb R1A,#49  ; I
016E: D702	      jne 0172
0170: 207B	      sjmp 01ED
0172: 99421A	      cmpb R1A,#42  ; B
0175: D702	      jne 0179
0177: 2009	      sjmp 0182
0179: 27C4	      sjmp monloop
; slash
017B: B12F1A	      ldb R1A,#2F   ; '/'
017E: 2912	      scall putbyte
0180: 27BD	      sjmp monloop

; B no op
0182: 27BB	      sjmp monloop

; R cmd  R addr count

0184: 28E4	      scall getxbyte ; 026A
0186: B01A1D	      ldb R1D,R1A
0189: 28DF	      scall getxbyte ; 026A
018B: B01A1C	      ldb R1C,R1A
018E: 28DA	      scall getxbyte ; 026A
0190: B01A1F	      ldb R1F,R1A
0193: 28D5	      scall getxbyte ; 026A
0195: B01A1E	      ldb R1E,R1A
0198: 8900001E	      cmp R1E,#0000
019C: DF09	      je 01A7

019E: B21D1A	      ldb R1A,[R1C]+
01A1: 290C	      scall putxbyte ; 02AF
01A3: 051E	      dec R1E
01A5: 27F1	      sjmp 0198
01A7: B12F1A	      ldb R1A,#2F
01AA: 28E6	      scall putbyte
01AC: 2791	      sjmp monloop

; W cmd    W addr count

01AE: 28BA	      scall getxbyte ; 026A
01B0: B01A1D	      ldb R1D,R1A
01B3: 28B5	      scall getxbyte ; 026A
01B5: B01A1C	      ldb R1C,R1A
01B8: 28B0	      scall getxbyte ; 026A
01BA: B01A1F	      ldb R1F,R1A
01BD: 28AB	      scall getxbyte ; 026A
01BF: B01A1E	      ldb R1E,R1A
01C2: 8900001E	      cmp R1E,#0000
01C6: DF09	      je 01D1
01C8: 28A0	      scall getxbyte ; 026A
01CA: C61D1A	      stb R1A,[R1C]+
01CD: 051E	      dec R1E
01CF: 27F1	      sjmp 01C2
01D1: 276C	      sjmp monloop

; G cmd G addr
01D3: 2895	      scall getxbyte ; 026A
01D5: B01A1D	      ldb R1D,R1A
01D8: 2890	      scall getxbyte ; 026A
01DA: B01A1C	      ldb R1C,R1A
01DD: 288B	      scall getxbyte ; 026A
01DF: B01A1F	      ldb R1F,R1A
01E2: 2886	      scall getxbyte ; 026A
01E4: B01A1E	      ldb R1E,R1A
01E7: E31C	      br [R1C]
01E9: E72EFF	      ljmp 011A
01EC: FF	      rst

; I cmd  I addr count byteval
; fill memory from addr to addr+count-1 with byte

01ED: 287B	      scall getxbyte ; 026A
01EF: B01A1D	      ldb R1D,R1A
01F2: 2876	      scall getxbyte ; 026A
01F4: B01A1C	      ldb R1C,R1A
01F7: 2871	      scall getxbyte ; 026A
01F9: B01A1F	      ldb R1F,R1A
01FC: 286C	      scall getxbyte ; 026A
01FE: B01A1E	      ldb R1E,R1A
0201: 2867	      scall getxbyte ; 026A
0203: 8900001E	      cmp R1E,#0000
0207: DF07	      je 0210
0209: C61D1A	      stb R1A,[R1C]+
020C: 051E	      dec R1E
020E: 27F3	      sjmp 0203
0210: 272D	      sjmp monloop

;
0212: 1B 5B 32 31 6D 20 20 69 38 30 39 36 20 4D 54 20 '.[21m  i8096 MT '
0222: 4D 4F 4E 49 54 45 52 20 20 56 65 72 20 30 2E 32 'MONITER  Ver 0.2'
0232: 20 20 20 5B 20 4F 4E 20 4C 49 4E 45 20 5D 1B 5B '   [ ON LINE ].['
0242: 32 32 6D 0A 0D 00 A1 00 00 20 B3 21 12 02 1A 99 '22m...¡..
³!...™'

; M display monitor version

0248: A1000020	      ld R20,#0000
024C: B32112021A      ldb R1A,0212[R20]
0251: 99001A	      cmpb R1A,#00
0254: DF06	      je 025C
0256: 283A	      scall 0292
0258: 0720	      inc R20
025A: 27F0	      sjmp 024C
025C: B12F1A	      ldb R1A,#2F
025F: 2831	      scall putbyte ; 0292
0261: 26DC	      sjmp monloop

0249: 0000	      skip R00
024B: 20B3	      sjmp 0300
024D: 2112	      sjmp 0361
024F: 021A	      not R1A
0251: 99001A	      cmpb R1A,#00
0254: DF06	      je 025C
0256: 283A	      scall putbyte
0258: 0720	      inc R20
025A: 27F0	      sjmp 024C
025C: B12F1A	      ldb R1A,#2F
025F: 2831	      scall putbyte
0261: 26DC	      sjmp monloop
getbyte: 3611FD		 jbc R11,6 getbyte
0266: B0071A	      ldb R1A,R07
0269: F0	      ret
; get hexdigit
getxbyte ; 026A: 2FF7		 scall getbyte
026C: 99391A	      cmpb R1A,#39
026F: D205	      jgt 0276
0271: 79301A	      subb R1A,#30
0274: 2003	      sjmp 0279
0276: 79371A	      subb R1A,#37
0279: 19041A	      shlb R1A,04
027C: B01A1B	      ldb R1B,R1A
027F: 2FE2	      scall getbyte
0281: 99391A	      cmpb R1A,#39
0284: D205	      jgt 028B
0286: 79301A	      subb R1A,#30
0289: 2003	      sjmp 028E
028B: 79371A	      subb R1A,#37
028E: 901B1A	      orb R1A,R1B
0291: F0	      ret

putbyte: C4071A		 stb R1A,R07
0295: 3511FD	      jbc R11,5 0295
0298: B1001A	      ldb R1A,#00
029B: E01AFD	      djnz R1A,029B
029E: F0	      ret
029F: 303132	      DB "0123456789ABCDEF"

putxbyte ; 02AF: B01A1B		 ldb R1B,R1A
02B2: 0120	      clr R20
02B4: B01A20	      ldb R20,R1A
02B7: 180420	      shrb R20,04
02BA: B3219F021A      ldb R1A,029F[R20]
02BF: 2FD1	      scall putbyte ; 0292
02C1: B01B1A	      ldb R1A,R1B
02C4: 0120	      clr R20
02C6: B01A20	      ldb R20,R1A
02C9: 710F20	      andb R20,#0F
02CC: B32188121A      ldb R1A,1288[R20]  ; '01234...'
02D1: 2FBF	      scall putbyte ; 0292
02D3: F0	      ret