Bios USR shell

Zdrojový kód

3      5b00            *s
4      5b00            ;==============================================================;
5      5b00            ;== Verzia ** == Bios USR shell =  30.03.1997 Busy software ==;
6      5b00            ;==============================================================;
7      5b00            *z!
8      5b00            verzia =    14
9      5b00                   org  #8000               "usr" USR sluzby
10     8000            z
11     8000 1810       getver jr   getvx               +0
12     8002 1819       print  jr   printx              +2
13     8004 181a       ldir   jr   ldirx               +4
14     8006 181e       lddr   jr   lddrx               +6
15     8008 1822       prevod jr   prevox              +8
16     800a 1831       rest   jr   restx               +10
17     800c 1847       secrd  jr   secrdx              +12
18     800e 1848       secwr  jr   secwrx              +14
19     8010 c9c9              dw   #c9c9
20     8012             
21     8012 cd9e3c     getvx  call ram                 Zistenie verzii
22     8015 af                xor  a
23     8016 4f                ld   c,a
24     8017 df                rst  #18                 Vracia:
25     8018 060e              ld   b,verzia             b = bush verzia
26     801a c3983c            jp   rom                  c = bios verzia
27     801d             
28     801d c31f81     printx jp   printy
29     8020             
30     8020 cd0e81     ldirx  call ldxx                Vstup: hl,de,bc
31     8023 edb0              ldir
32     8025 c9                ret
33     8026             
34     8026 cd0e81     lddrx  call ldxx                Vstup: hl,de,bc
35     8029 edb8              lddr
36     802b c9                ret
37     802c             
38     802c cde380     prevox call zac                 Prevod log cisla na fyzicke
39     802f cd0881            call get16                 Vstup: log_cislo16,sec/trk8
40     8032 c5                push bc                   Vystup: fyz_cislo16
41     8033 cdfc80            call get8c
42     8036 e1                pop  hl
43     8037 cdc480            call preexe
44     803a 42                ld   b,d
45     803b 4b                ld   c,e
46     803c c9                ret
47     803d             
48     803d cde380     restx  call zac                 Restore
49     8040 cdff80            call get8                 Vstup: disk
50     8043 cd9e3c            call ram
51     8046 5f                ld   e,a
52     8047 3e0c              ld   a,aktive
53     8049 df                rst  #18
54     804a fe02              cp   #02
55     804c 3e80              ld   a,#80
56     804e 3869              jr   c,scret
57     8050 3e02              ld   a,restor
58     8052 df                rst  #18
59     8053 1864              jr   scret
60     8055             
61     8055 3e04       secrdx ld   a,rdsec             Read / write sektor
62     8057 01                db   #01                 Vstup: disk,rezim,stopa,
63     8058 3e05       secwrx ld   a,wrsec                    strana,sektor,adresa
64     805a 32b780            ld   (scoper+1),a
65     805d cde380            call zac
66     8060 cdff80            call get8                disk
67     8063 329d80            ld   (scdsk+1),a
68     8066 cdfc80            call get8c               rezim
69     8069 32a880            ld   (screz+1),a
70     806c cdfc80            call get8c               stopa
71     806f 32b280            ld   (scfyz+2),a
72     8072 cdfc80            call get8c               strana
73     8075 e601              and  #01
74     8077 0f                rrca
75     8078 f5                push af
76     8079 cdfc80            call get8c               sektor
77     807c c1                pop  bc
78     807d b0                or   b
79     807e 32b180            ld   (scfyz+1),a
80     8081 cd0581            call get16c
81     8084 ed43b480          ld   (scadd+1),bc        adresa
82     8088 cd9e3c            call ram
83     808b 1e00              ld   e,#00
84     808d 3e11              ld   a,setoff
85     808f df                rst  #18
86     8090 210000            ld   hl,#00
87     8093 3e10              ld   a,setmlt
88     8095 df                rst  #18
89     8096 010004            ld   bc,#0400
90     8099 3e0f              ld   a,setmax
91     809b df                rst  #18
92     809c 1e09       scdsk  ld   e,#09
93     809e 3e0c              ld   a,aktive
94     80a0 df                rst  #18
95     80a1 fe02              cp   #02
96     80a3 3e02              ld   a,#02               Vystupy:
97     80a5 3812              jr   c,scret             #02 = disk not ready
98     80a7 1e01       screz  ld   e,#01                     alebo neexistuje
99     80a9 3e09              ld   a,rezim
100    80ab df                rst  #18
101    80ac 3e80              ld   a,#80               #80 = dany rezim sa nepodporuje
102    80ae 2009              jr   nz,scret
103    80b0 110200     scfyz  ld   de,#02
104    80b3 210040     scadd  ld   hl,#4000
105    80b6 3e04       scoper ld   a,#04
106    80b8 df                rst  #18                 #XX = status ako z biosu
107    80b9 f5         scret  push af
108    80ba 3e0d              ld   a,pasive
109    80bc df                rst  #18
110    80bd f1                pop  af
111    80be 4f                ld   c,a
112    80bf 0600              ld   b,#00
113    80c1 c3983c     rromm  jp   rom
114    80c4             
115    80c4 4f         preexe ld   c,a                 Prevod log -> fyz cislo sektora
116    80c5 87                add  a,a                   In: hl = logicke cislo
117    80c6 57                ld   d,a                  Out: de = fyzicke cislo
118    80c7 1e00       del16  ld   e,#00
119    80c9 0608              ld   b,#08
120    80cb cb3a       lopp   srl  d
121    80cd cb1b              rr   e
122    80cf ed52              sbc  hl,de
123    80d1 3001              jr   nc,rot3
124    80d3 19                add  hl,de
125    80d4 3f         rot3   ccf
126    80d5 17                rla
127    80d6 10f3              djnz lopp
128    80d8 57                ld   d,a
129    80d9 7d                ld   a,l
130    80da b9                cp   c
131    80db 3803              jr   c,preend
132    80dd 91                sub  c
133    80de f680              or   #80
134    80e0 3c         preend inc  a
135    80e1 5f                ld   e,a
136    80e2 c9                ret
137    80e3             
138    80e3                                            ----- Parametre ----
139    80e3             
140    80e3 df         zac    rst  #18                 Hlavny vstup
141    80e4 fe3a              cp   ':'                 a) USR add;p1,p2,p3
142    80e6 2007              jr   nz,zc1              b) USR add:PRINT p1,p2,p3
143    80e8 e7                rst  #20
144    80e9 fef5              cp   #f5                 print
145    80eb 2001              jr   nz,#01
146    80ed e7         zc2    rst  #20
147    80ee c9                ret
148    80ef fe3b       zc1    cp   ';'
149    80f1 28fa              jr   z,zc2
150    80f3 cf         nonsen rst  #08                 Nonsense in basic
151    80f4 0b                db   #0b
152    80f5             
153    80f5 df         ciarka rst  #18                 Musi nasledovat ciarka
154    80f6 fe2c              cp   ','
155    80f8 20f9              jr   nz,nonsen
156    80fa e7                rst  #20
157    80fb c9                ret
158    80fc             
159    80fc cdf580     get8c  call ciarka              8 bitove cislo
160    80ff cd821c     get8   call #1c82               scann cisla
161    8102 c3941e            jp   #1e94               stk-to-a
162    8105             
163    8105 cdf580     get16c call ciarka              16 bitove cislo
164    8108 cd821c     get16  call #1c82               scann cisla
165    810b c3991e            jp   #1e99               stk-to-bc
166    810e             
167    810e cde380     ldxx   call zac                 Parametre pre LDIR
168    8111 cd0881            call get16
169    8114 c5                push bc
170    8115 cd0581            call get16c
171    8118 c5                push bc
172    8119 cd0581            call get16c
173    811c d1                pop  de
174    811d e1                pop  hl
175    811e c9                ret
176    811f             
177    811f                                            ----- Disp 4x8 -----
178    811f cde380     printy call zac                 Vstup: riadok,stlpec,"text"
179    8122 cdff80            call get8
180    8125 322183            ld   (yyy),a
181    8128 cdfc80            call get8c
182    812b 322083            ld   (xxx),a
183    812e cdf580            call ciarka
184    8131 cd8c1c            call #1c8c               scann vyrazu
185    8134 cdf12b            call #2bf1               parametre vyrazu
186    8137 78         prloop ld   a,b
187    8138 b1                or   c
188    8139 c8                ret  z
189    813a 1a                ld   a,(de)
190    813b 13                inc  de
191    813c 0b                dec  bc
192    813d cd4281            call disp
193    8140 18f5              jr   prloop
194    8142             
195    8142 c5         disp   push bc
196    8143 d5                push de
197    8144 e5                push hl
198    8145 112081            ld   de,znaky-#80
199    8148 87                add  a,a                 a = kod znaku
200    8149 6f                ld   l,a
201    814a 2600              ld   h,#00
202    814c 29                add  hl,hl
203    814d 19                add  hl,de
204    814e eb                ex   de,hl               de = pozicia v zn.subore
205    814f             
206    814f 2a2083            ld   hl,(cursor)         h = riadok, l = stlpec
207    8152 cb1d              rr   l
208    8154 9f                sbc  a,a
209    8155 eef0              xor  #f0                 Pre 0,0 bude c=#0f,b=#f0
210    8157 4f                ld   c,a
211    8158 7c                ld   a,h                 h = riadok,l = stlpec
212    8159 0f                rrca
213    815a 0f                rrca
214    815b 0f                rrca
215    815c e6e0              and  #e0
216    815e b5                or   l
217    815f 6f                ld   l,a
218    8160 7c                ld   a,h
219    8161 e618              and  #18
220    8163 f640              or   #40
221    8165 67                ld   h,a                 hl=pozicia vo videoram
222    8166             
223    8166 0608              ld   b,#08
224    8168 79         dsll   ld   a,c
225    8169 2f                cpl
226    816a a6                and  (hl)
227    816b 77                ld   (hl),a
228    816c 78                ld   a,b
229    816d a9                xor  c
230    816e 0f                rrca                     and #01
231    816f 1a                ld   a,(de)
232    8170 3004              jr   nc,#04              jr z,#04
233    8172 0f                rrca
234    8173 0f                rrca
235    8174 0f                rrca
236    8175 0f                rrca
237    8176 a1                and  c
238    8177 b6                or   (hl)
239    8178 77                ld   (hl),a
240    8179 cb40              bit  0,b
241    817b 2801              jr   z,#01
242    817d 13                inc  de
243    817e 24                inc  h
244    817f 10e7              djnz dsll
245    8181             
246    8181 212083            ld   hl,cursor
247    8184 7e                ld   a,(hl)
248    8185 3c                inc  a
249    8186 e63f              and  #3f
250    8188 2009              jr   nz,dseee
251    818a 77                ld   (hl),a
252    818b 23                inc  hl
253    818c 7e                ld   a,(hl)
254    818d 3c                inc  a
255    818e fe18              cp   #18
256    8190 3801              jr   c,dseee
257    8192 af                xor  a
258    8193 77         dseee  ld   (hl),a
259    8194 e1                pop  hl
260    8195 d1                pop  de
261    8196 c1                pop  bc
262    8197 c9                ret
263    8198             
264    8198 00000070          db   #00,#00,#00,#70     ciarocka
265    819c 07777770          db   #07,#77,#77,#70     stvorcek
266    81a0 00000000   znaky  db   'xxx'
---    ---- --------
293    831a 00000f9f          db   'xxx'
294    8320             
295    8320            k
296    8320            l      =    k-z
297    8320            ld     =    znaky-disp
298    8320             
299    8320            cursor
300    8320 00         xxx    db   #00
301    8321 00         yyy    db   #00
302    8322             
303    8322 3e1e       p      ld   a,#1e
304    8324 f5         pp     push af
305    8325 cd4281            call disp
306    8328 f1                pop  af
307    8329 3c                inc  a
308    832a f22483            jp   p,pp
309    832d c9                ret
310    832e             
311    832e            rom    =    #3c98               MEM-bios
312    832e            ram    =    #3c9e
313    832e             
314    832e            status =    #01                 FDC-bios
315    832e            restor =    #02
316    832e            seek   =    #03
317    832e            rdsec  =    #04
318    832e            wrsec  =    #05
319    832e            rezim  =    #09
320    832e            aktive =    #0c
321    832e            pasive =    #0d
322    832e            info   =    #0e
323    832e            setmax =    #0f
324    832e            setmlt =    #10
325    832e            setoff =    #11
326    832e             

 aktive 000c  *  ciarka 80f5  *  cursor 8320  *  del16  80c7  *
 disp   8142  *  dseee  8193  *  dsll   8168  *  get16  8108  *
 get16c 8105  *  get8   80ff  *  get8c  80fc  *  getver 8000  *
 getvx  8012  *  info   000e  *  k      8320  *  l      0320  *
 ld     005e  *  lddr   8006  *  lddrx  8026  *  ldir   8004  *
 ldirx  8020  *  ldxx   810e  *  lopp   80cb  *  nonsen 80f3  *
 p      8322  *  pasive 000d  *  pp     8324  *  preend 80e0  *
 preexe 80c4  *  prevod 8008  *  prevox 802c  *  print  8002  *
 printx 801d  *  printy 811f  *  prloop 8137  *  ram    3c9e  *
 rdsec  0004  *  rest   800a  *  restor 0002  *  restx  803d  *
 rezim  0009  *  rom    3c98  *  rot3   80d4  *  rromm  80c1  *
 scadd  80b3  *  scdsk  809c  *  scfyz  80b0  *  scoper 80b6  *
 scret  80b9  *  screz  80a7  *  secrd  800c  *  secrdx 8055  *
 secwr  800e  *  secwrx 8058  *  seek   0003  *  setmax 000f  *
 setmlt 0010  *  setoff 0011  *  status 0001  *  verzia 000e  *
 wrsec  0005  *  xxx    8320  *  yyy    8321  *  z      8000  *
 zac    80e3  *  zc1    80ef  *  zc2    80ed  *  znaky  81a0  *

Bytes:814  labels:68  errors:0   





Popis
Utilitka pro zpřístupnění služeb BS-DOSu v BASICu.

Poznámky
Nic...

Poslal
Busy