📄 core.lst
字号:
Turbo Assembler Version 4.1 11/01/02 01:23:14 Page 1
core.ASM
instinct - core 0.0.3
1 %TITLE "instinct - core 0.0.3"
2
3 ; APM code provided by Vinny <vincent@gmx.at>
4 ; FAT12 code provided by Simeon Maxein <smaxein@freenet.de>
5 ; IDEAL mode code inspired by Tom Swan's Mastering Borland Turbo Assembler
6
7 IDEAL
8 0000 MODEL SMALL, C
9 0000 STACK
10 JUMPS
11 LOCALS @@
12 0400 CODESEG
13 P386N
14 0000 start:
15 0000 8C C8 MOV AX, CS
16 0002 8E D8 MOV DS, AX
17 0004 8E C0 MOV ES, AX
18 0006 66| C1 E0 10 SHL EAX, 16d ; Map Interrupt 20h
19 000A B8 0700r MOV AX, OFFSET int20h
20 000D 33 DB XOR BX, BX
21 000F 8E E3 MOV FS, BX
22 0011 FA CLI
23 0012 66| 64: A3 0080 MOV [FS:20h*4], EAX
24 0017 FB STI
25
26 0018 E8 0939 CALL consoleClearScreen
27 001B BE 0026r MOV SI, OFFSET bMSG
28 001E E8 08CE CALL consoleBufferedOutput
29 0021 E8 0757 CALL consoleCLI
30 0024 EB FE JMP $
31
32 0026 69 6E 73 74 69 6E 63+ bMSG DB 'instinct v0.0.3',13,10,0
33 74 20 76 30 2E 30 2E+
34 33 0D 0A 00
35
36 0038 0012 wSectsPTrk DW 18d
37 003A 0002 wDrivHeads DW 2d
38 003C 00 bDrivNumbr DB 00h
39 003D ?? bdiskfsCYL DB ?
40 003E ?? bdiskfHEAD DB ?
41 003F ?? bdiskfSECT DB ?
42 0040 0003 wCoreVersn DW 0003h
43
44
45
46
47
48
49
50
51
52 ORG 700h
53 0700 int20h:
54 0700 80 FC 00 D00h: CMP AH, 00h
55 0703 75 06 JNE D01h
56 0705 E8 01DF CALL appReturn
57 0708 EB 70 90 JMP Dxxh
Turbo Assembler Version 4.1 11/01/02 01:23:14 Page 2
core.ASM
instinct - core 0.0.3
58 070B 80 FC 01 D01h: CMP AH, 01h
59 070E 75 06 JNE D02h
60 0710 E8 01D8 CALL appExecute
61 0713 EB 65 90 JMP Dxxh
62 0716 80 FC 02 D02h: CMP AH, 02h
63 0719 75 05 JNE D03h
64 071B E8 01D1 CALL consoleBufferedOutput
65 071E EB 5A JMP Dxxh
66 0720 80 FC 03 D03h: CMP AH, 03h
67 0723 75 05 JNE D04h
68 0725 E8 01D9 CALL consoleBufferedInput
69 0728 EB 50 JMP Dxxh
70 072A 80 FC 04 D04h: CMP AH, 04h
71 072D 75 05 JNE D05h
72 072F E8 0222 CALL consoleClearScreen
73 0732 EB 46 JMP Dxxh
74 0734 80 FC 05 D05h: CMP AH, 05h
75 0737 75 05 JNE D06h
76 0739 E8 0235 CALL coreBeep
77 073C EB 3C JMP Dxxh
78 073E 80 FC 06 D06h: CMP AH, 06h
79 0741 75 05 JNE D07h
80 0743 E8 0269 CALL coreShutdown
81 0746 EB 32 JMP Dxxh
82 0748 80 FC 07 D07h: CMP AH, 07h
83 074B 75 0B JNE D08h
84 CALL diskfsReadSector, BX, CX, ES
1 85 074D 06 PUSH ES
1 86 074E 51 PUSH CX
1 87 074F 53 PUSH BX
1 88 0750 E8 02CD CALL DISKFSREADSECTOR
1 89 0753 83 C4 06 ADD SP,00006h
90 0756 EB 22 JMP Dxxh
91 0758 80 FC 08 D08h: CMP AH, 08h
92 075B 75 05 JNE D09h
93 075D E8 031D CALL diskfsWriteSector
94 0760 EB 18 JMP Dxxh
95 0762 80 FC 09 D09h: CMP AH, 09h
96 0765 75 05 JNE D0Ah
97 0767 E8 0317 CALL coreQueryVersion
98 076A EB 0E JMP Dxxh
99 076C 80 FC 0A D0Ah: CMP AH, 0Ah
100 076F 75 05 JNE DFFh
101 0771 E8 0007 CALL consoleCLI
102 0774 EB 04 JMP Dxxh
103 0776 B8 FFFF DFFh: MOV AX, 0FFFFh
104 0779 F9 STC
105 077A Dxxh:
106 077A CF IRET
107
108
109
110
111
112
113
114 077B PROC consoleCLI NEAR
Turbo Assembler Version 4.1 11/01/02 01:23:14 Page 3
core.ASM
instinct - core 0.0.3
115 077B 8C C8 MOV AX, CS
116 077D 8E D8 MOV DS, AX
117 077F 8E C0 MOV ES, AX
118 0781 @@CLILoop:
119 0781 BE 08D0r MOV SI, OFFSET @@bPrompt
120 0784 E8 0168 CALL consoleBufferedOutput
121 0787 BF 07CDr MOV DI, OFFSET @@bBuffer
122 078A B9 00FF MOV CX, 0FFh
123 078D E8 0171 CALL consoleBufferedInput
124 0790 81 FF 07CEr CMP DI, OFFSET @@bBuffer+1
125 0794 74 EB JE @@CLILoop
126 0796 BE 08CDr MOV SI, OFFSET @@bCRLF
127 0799 E8 0153 CALL consoleBufferedOutput
128
129 CALL findFile, OFFSET @@bBuffer, 2500h
1 130 079C 68 2500 PUSH 2500H
1 131 079F 68 07CDr PUSH OFFSET @@BBUFFER
1 132 07A2 E8 037C CALL FINDFILE
1 133 07A5 83 C4 04 ADD SP,00004h
134 07A8 0B DB OR BX, BX
135 07AA 75 19 JNZ @@Fail
136 CALL chainLoad, AX, 5000h
1 137 07AC 68 5000 PUSH 5000H
1 138 07AF 50 PUSH AX
1 139 07B0 E8 0320 CALL CHAINLOAD
1 140 07B3 83 C4 04 ADD SP,00004h
141 07B6 0B DB OR BX, BX
142 07B8 75 0B JNZ @@Fail
143 07BA 1E PUSH DS
144 07BB 06 PUSH ES
145 07BC 9A DB 09Ah
146 07BD 0000 DW 0000h
147 07BF 5000 DW 5000h
148 07C1 07 POP ES
149 07C2 1F POP DS
150
151 07C3 EB BC JMP @@CLILoop
152 07C5 @@Fail:
153 07C5 BE 08D5r MOV SI, OFFSET @@bLoadFail
154 07C8 E8 0124 CALL consoleBufferedOutput
155 07CB EB B4 JMP @@CLILoop
156
157 07CD 0100*(??) @@bBuffer DB 256 DUP (?)
158 08CD 0D 0A 00 @@bCRLF DB 13,10,0
159 08D0 0D 0A 3E 20 00 @@bPrompt DB 13,10,'> ',0
160 08D5 55 6E 6B 6E 6F 77 6E+ @@bLoadFail DB 'Unknown Command',13,10,0
161 20 43 6F 6D 6D 61 6E+
162 64 0D 0A 00
163
164 08E7 ENDP consoleCLI
165
166 08E7 PROC appReturn NEAR
167 08E7 33 C0 XOR AX, AX
168 08E9 F8 CLC
1 169 08EA C3 RET 00000h
170
171 08EB ENDP appReturn
Turbo Assembler Version 4.1 11/01/02 01:23:14 Page 4
core.ASM
instinct - core 0.0.3
172
173 08EB PROC appExecute NEAR
174 08EB 33 C0 XOR AX, AX
175 08ED F8 CLC
1 176 08EE C3 RET 00000h
177
178 08EF ENDP appExecute
179
180 08EF PROC consoleBufferedOutput NEAR
181 08EF @@charLoop:
182 08EF AC LODSB
183 08F0 0A C0 OR AL, AL
184 08F2 74 09 JZ @@success
185 08F4 BB 0007 MOV BX, 0007h
186 08F7 B4 0E MOV AH, 0Eh
187 08F9 CD 10 INT 10h
188 08FB EB F2 JMP @@charLoop
189
190 08FD @@success:
191 08FD 33 C0 XOR AX, AX
192 08FF F8 CLC
1 193 0900 C3 RET 00000h
194
195 0901 ENDP consoleBufferedOutput
196
197 0901 PROC consoleBufferedInput NEAR
198 0901 8B D7 MOV DX, DI
199 0903 @@keyLoop:
200 0903 33 C0 XOR AX, AX
201 0905 CD 16 INT 16h ; Key Input
202 0907 3C 0D CMP AL, 13d
203 0909 74 3E JE @@success
204 090B 3C 08 CMP AL, 8d
205 090D 74 12 JE @@backspace
206 090F 8B DF MOV BX, DI
207 0911 2B DA SUB BX, DX
208 0913 3B D9 CMP BX, CX
209 0915 73 EC JAE @@keyLoop
210 0917 B4 0E MOV AH, 0Eh
211 0919 BB 0007 MOV BX, 0007h
212 091C CD 10 INT 10h ; Character Output
213 091E @@charSave:
214 091E AA STOSB
215 091F EB E2 JMP @@keyLoop
216 0921 @@backspace:
217 0921 3B FA CMP DI, DX
218 0923 74 1E JE @@keyCancel
219 0925 4F DEC DI
220 0926 B0 08 MOV AL, 8d
221 0928 B4 0E MOV AH, 0Eh
222 092A BB 0007 MOV BX, 0007h
223 092D CD 10 INT 10h ; Character Output
224 092F B0 20 MOV AL, ' '
225 0931 B4 0E MOV AH, 0Eh
226 0933 BB 0007 MOV BX, 0007h
227 0936 CD 10 INT 10h ; Character Output
228 0938 B0 08 MOV AL, 8d
Turbo Assembler Version 4.1 11/01/02 01:23:14 Page 5
core.ASM
instinct - core 0.0.3
229 093A B4 0E MOV AH, 0Eh
230 093C BB 0007 MOV BX, 0007h
231 093F CD 10 INT 10h ; Character Output
232 0941 EB C0 JMP @@keyLoop
233 0943 @@keyCancel:
234 0943 B4 05 MOV AH, 05h ; Beep
235 0945 CD 20 INT 20h
236 0947 EB BA JMP @@keyLoop
237 0949 @@success:
238 0949 8B CF MOV CX, DI
239 094B 2B CA SUB CX, DX
240 094D 8A C0 MOV AL, AL
241 094F AA STOSB
242 0950 8B C0 MOV AX, AX
243 0952 F8 CLC
1 244 0953 C3 RET 00000h
245
246 0954 ENDP consoleBufferedInput
247
248 0954 PROC consoleClearScreen NEAR
249 0954 B0 00 MOV al, 00h
250 0956 B7 07 MOV bh, 7d
251 0958 B9 0000 MOV cx, 00h
252 095B B6 18 MOV dh, 24d
253 095D B2 4F MOV dl, 79d
254 095F B4 06 MOV ah, 06h
255 0961 CD 10 INT 10h
256 0963 B7 00 MOV bh, 00h
257 0965 B6 00 MOV dh, 00h
258 0967 B2 00 MOV dl, 00h
259 0969 B4 02 MOV ah, 02h
260 096B CD 10 INT 10h
261 096D 33 C0 XOR AX, AX
262 096F F8 CLC
1 263 0970 C3 RET 00000h
264
265 0971 ENDP consoleClearScreen
266
267 0971 PROC coreBeep NEAR
268 0971 FA CLI
269 0972 BA 0217 MOV DX, 535 ; higher = quieter
270 0975 B0 B6 MOV AL, 0B6h
271 0977 E6 43 OUT 43h, AL ; PIT ctrl word port
272 0979 8A C2 MOV AL, DL
273 097B E6 42 OUT 42h, AL ; PIT misc reg port
274 097D 8A C6 MOV AL, DH
275 097F E6 42 OUT 42h, AL ; PIT misc reg port
276 0981 E4 61 IN AL, 61h ; 8042 ctrl reg
277 0983 8A E0 MOV AH, AL
278 0985 0C 03 OR AL, 03h
279 0987 E6 61 OUT 61h, AL ; 8042 ctrl reg
280 0989 B4 00 MOV AH, 00h ; Get time of day
281 098B CD 1A INT 1Ah
282 098D 83 C2 04 ADD DX, 04h ; Duration: 16th of seconds
283 0990 8B DA MOV BX, DX
284 0992 @@waitLoop:
285 0992 CD 1A INT 1Ah ; Get counter
Turbo Assembler Version 4.1 11/01/02 01:23:14 Page 6
core.ASM
instinct - core 0.0.3
286 0994 3B D3 CMP DX, BX ; Keep waiting
287 0996 75 FA JNE @@waitloop
288 0998 8A C4 MOV AL, AH
289 099A E6 61 OUT 61h, AL ; 8042 ctrl reg
290 099C FB STI
291 099D @@keyWaitLoop:
292 099D B4 01 MOV AH, 01h ; Wait for key release
293 099F CD 16 INT 16h
294 09A1 75 02 JNZ @@keyRelease
295 09A3 EB 06 JMP @@success
296 09A5 @@keyRelease:
297 09A5 B4 00 MOV AH, 00h ; Clear key buffer
298 09A7 CD 16 INT 16h
299 09A9 EB F2 JMP @@keyWaitLoop
300
301 09AB @@success:
302 09AB 33 C0 XOR AX, AX
303 09AD F8 CLC
1 304 09AE C3 RET 00000h
305
306 09AF ENDP coreBeep
307
308 09AF PROC coreShutdown NEAR
309 09AF B8 5300 MOV AX, 5300h
310 09B2 33 DB XOR BX, BX
311 09B4 CD 15 INT 15h
312 09B6 B8 5304 MOV AX, 5304h
313 09B9 33 DB XOR BX, BX
314 09BB CD 15 INT 15h
315 09BD B8 5301 MOV AX, 5301h
316 09C0 33 DB XOR BX, BX
317 09C2 CD 15 INT 15h
318 09C4 B8 5307 MOV AX, 5307h
319 09C7 BB 0001 MOV BX, 01h
320 09CA B9 0003 MOV CX, 03h
321 09CD CD 15 INT 15h
322 09CF 1E PUSH DS
323 09D0 8C C8 MOV AX, CS
324 09D2 8E D8 MOV DS, AX
325 09D4 BE 09ECr MOV SI, OFFSET @@shutoff
326 09D7 B4 02 MOV AH, 02h
327 09D9 CD 20 INT 20h
328 09DB 33 C0 XOR AX, AX
329 09DD CD 16 INT 16h
330 09DF BE 0A14r MOV SI, OFFSET @@canceled
331 09E2 B4 02 MOV AH, 02h
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -