initial
[fpgammix.git] / workloads / readmoto.mms
bloba3c2831ec20da862a0dd64ccf9a63c7e77642710
1 ! Boot loader, reading srec
3 !#define IOSPACE        $253
4 !#define SUM    $252
5 !#define ERROR   $251
7 IOSPACE GREG
8 SUM     GREG
9 ERROR   GREG
10 InputText   GREG
12         .text
13         .p2align 2
14         .global main
16         LOC     #80000000
17 Main    IS      @
18         SETH    IOSPACE,1
19         GETA    InputText,SampleInput
21 Loop    IS      @
22         SETL    ERROR,0
23         GETA    $1,WelcomeText
24         PUSHJ   $0,Puts
25         PUSHJ   $0,Getch
26         CMP     $0,$0,'S'
27         BNZ     $0,Loop
29         PUSHJ   $0,Getdigit
30 ! $0 is type
31         CMP     $1,$0,1
32         BZ      $1,Loop1
33         CMP     $1,$0,9
34         BNZ     $1,Loop
36 Loop1   IS      @
37         SETL    SUM,0
38         PUSHJ   $1,Get2digits
39 ! $1 is count
40         PUSHJ   $2,Get4digits
41 ! $2 is address
43 ! Adjust for the already read 2 address bytes and the final checksum
44         SUBU    $1,$1,3
45 ! Skip if no data is expected
46         BZ      $1,Loop9
48 ! data loop
49 Loop2   IS      @
50         PUSHJ   $3,Get2digits
51         BNZ     ERROR,HandleError
53         STBU    $3,$2,0
54         ADDU    $2,$2,1
56         SUBU    $1,$1,1
57         BNZ     $1,Loop2
59 ! Check the checksum
60 Loop9   IS      @
61         PUSHJ   $3,Get2digits
62         AND     $3,$3,255
63         CMP     $3,$3,255
64         BNZ     $3,HandleChecksumError
66         CMP     $1,$0,1
67         BZ      $1,Loop11
69         PUSHGO  $0,$2
71 Loop11  IS      @
72         SETL    $1,'.'
73         PUSHJ   $0,Putch
74         JMP     Loop
76 HandleChecksumError IS      @
77         GETA    $1,ChecksumErrorText
78         PUSHJ   $0,Puts
79         JMP     Loop
81 HandleError IS      @
82         GETA    $1,ErrorText
83         PUSHJ   $0,Puts
84         JMP     Loop
86         LOC  (@+3)&-4
87 ChecksumErrorText IS      @
88         BYTE    "Checksum Error, skipping",#0D,#0A,#0
90         LOC  (@+3)&-4
91 ErrorText IS      @
92         BYTE    "Error, skipping",#0D,#0A,#0
94         LOC  (@+3)&-4
95 WelcomeText IS      @
96         BYTE    "$ ",#0
98         LOC  (@+3)&-4
99 SampleInput IS  @
100         BYTE    "askldS10D299020000000000000A843002E",#0D,#0A
101         BYTE    "S90301807B",#0D,#0A
103         LOC  (@+3)&-4
104 Putch   IS      @
105         LDTU    $1,IOSPACE,4
106         PBOD    $1,Putch
107         STBU    $0,IOSPACE,7
108         POP     0,0
111 ! $0 address, $1 ret addr, $3 out param
112 Puts    IS      @
113         GET     $1,rJ
114         LDBU    $3,$0,0
115         BZ      $3,Puts1
116 Puts2   IS      @
117         PUSHJ   $2,Putch
118         ADD     $0,$0,1
119         LDBU    $3,$0,0
120         BNZ     $3,Puts2
121 Puts1   IS      @
122         PUT     rJ,$1
123         POP     0,0
126 Getch   IS      @
127         LDT     $0,IOSPACE,12
128         PBN     $0,Getch
129         POP     1,0
131 ! Getch   IS      @ ! fake
132 !         LDBU    $0,InputText,0
133 !         ADDU    InputText,InputText,1
134 !         POP     1,0
136 Getdigit IS      @
137         BNZ     ERROR,Fail
138         GET     $0,rJ
139         PUSHJ   $1,Getch
140         CMP     $2,$1,'0'
141         BN      $2,Fail
142         CMP     $2,$1,'9'+1
143         BNN     $2,Getdigit1
144         PUT     rJ,$0
145         SUB     $0,$1,'0'
146         POP     1,0
147 Getdigit1 IS      @
148         CMP     $2,$1,'A'
149         BN      $2,Fail
150         CMP     $2,$1,'F'+1
151         BNN     $2,Fail
152         PUT     rJ,$0
153         SUBU    $0,$1,'A'-10
154         POP     1,0
155 Fail    IS      @
156         SETL    ERROR,1
157         PUT     rJ,$0
158         POP     0,0
160 Get2digits IS      @
161         GET     $0,rJ
162         PUSHJ   $1,Getdigit
163         PUSHJ   $2,Getdigit
164         PUT     rJ,$0
165         16ADDU  $0,$1,$2
166         ADDU    SUM,SUM,$0
167         POP     1,0
169 Get4digits IS      @
170         GET     $0,rJ
171         PUSHJ   $1,Get2digits
172         SLU     $1,$1,8
173         PUSHJ   $2,Get2digits
174         PUT     rJ,$0
175         ADDU    $0,$1,$2
176         POP     1,0