Raw File
1 ; _____________________________________________
2 ; | |
3 ; | Project: APPLER |
4 ; | File: STARTUP.ASM |
5 ; | Compiler: 16-bit TASM (2.5) |
6 ; | |
7 ; | Subject: Program Startup |
8 ; | |
9 ; | Author: Emil Dotchevski |
10 ; |_____________________________________________|
11
12 Startup segment public
13 Startup ends
14
15 include GLOBALS.INC
16 include INTERFAC.INC
17 include FM.INC
18
19 Apple segment public
20 db 0FFFFh dup (0)
21 org 0
22 db 8Dh,51h,0C0h ; 0000- STA C051
23 db 8Dh,54h,0C0h ; 0003- STA C054
24 db 0A9h,0A0h ; 0006- LDA #A0 <ÄÄÄÄÄ¿
25 db 0A2h,0 ; 0008- LDX #00 ³
26 db 9Dh,0,4 ; 000A- STA 400,x <Ä¿ ³
27 db 0E8h ; 000D- INX ³ ³
28 db 0D0h,0FAh ; 000E- BNE 000A ÄÄÄÙ ³
29 db 0A5h,0Ch ; 0010- LDA 0C ³
30 db 0C9h,7 ; 0012- CMP #07 ³
31 db 0B0h,5 ; 0014- BCS 001B ÄÄÄ¿ ³
32 db 0E6h,0Ch ; 0016- INC 0C ³ ³
33 db 04Ch,6,0 ; 0018- JMP 0006 ÄÄÄÅÄÙ
34 db 0B5h,28h ; 001B- LDA 28,x <ÄÄÁÄ¿
35 db 0F0h,0FEh ; 001D- BEQ 001D ³
36 db 9,80h ; 001F- ORA #80 ³
37 db 9Dh,0D0h,7 ; 0021- STA 07D0,x ³
38 db 0E8h ; 0024- INX ³
39 db 04Ch,1Bh,0 ; 0025- JMP 001B ÄÄÄÄÄÙ
40 db 'ROM is missing, Apple halted. Press <F1>',0
41 Apple ends
42
43
44
45 Startup segment public
46 assume CS:Startup
47
48 StartHere: xor al,al
49 out 21h,al
50 mov bx,sp
51 shr bx,4
52 mov ax,ss
53 mov cx,ds
54 sub ax,cx
55 add bx,ax
56 inc bx
57 mov ah,4Ah
58 int 21h
59 call CheckVideoType ; Check for video type
60 call CommandLine ; Read ROM & Command Line Files
61 call SaveDosScr ; Save DOS screen
62 call Advertisement ; Show advertisement
63 call HookVectors ; Hook 01 & 09 interrupts
64 call InitKeyboard ; Turn keyboard lights off
65 call InitData ; Build data tables
66 call SystemINIT
67 call InsertDisks ; Insert Default Disk Files
68 jmp CALLpowerON ; GO!
69
70
71 StartupON proc far
72 call HookVectors ; Hook 01 & 09 interrupts
73 call InitKeyboard ; Turn keyboard lights off
74 call SaveDosScr ; Save DOS screen
75 ret
76 StartupON endp
77
78 StartupOFF proc far
79 call RestoreDosScr
80 call UnInitKeyboard
81 call UnHookVectors
82 ret
83 StartupOFF endp
84
85
86 CheckVideoType Proc near
87 push ds
88 mov ah,12h
89 mov bl,10h
90 int 10h
91 and bl,not 10h ; =0 if CGA or 64k EGA
92 jz ChkVideoType20
93 cmp bh,1
94 jne ChkVideoType10
95 mov ax,seg Port3?4h
96 mov ds,ax
97 mov DS:Port3?4h,3B4h
98 ChkVideoType10:
99 pop ds
100 ret
101
102 ChkVideoType20: push cs
103 pop ds
104 mov dx,offset NoEGAmessage
105 mov ah,9
106 int 21h
107 mov ax,4C02h
108 int 21h
109 ; exit 2
110
111 NoEGAmessage db 0Dh,0Ah,' This program requires 128k EGA or more.'
112 db 0Dh,0Ah,'$'
113 CheckVideoType Endp
114
115
116 RunFile? db 0
117 StoredDS dw ?
118 DTA db 80h dup (0)
119 Path db 160 dup (0)
120
121 CommandLine proc near
122 push ds es
123 mov cs:StoredDS,ds
124 mov ah,62h
125 int 21h
126 mov es,bx
127 mov es,es:[2Ch]
128 xor di,di
129 mov cx,0FFFFh
130 cld
131 RF_SeekPath: xor al,al
132 repne scasb
133 cmp byte ptr es:[di],0
134 jnz RF_SeekPath
135 mov si,di
136 add si,3
137 mov ax,es
138 mov ds,ax
139 push cs
140 pop es
141 mov di,offset Path
142 xor bx,bx
143 RF_GetPath: lodsb
144 stosb
145 cmp al,'\'
146 jne RF_GP_1
147 mov bx,di
148 jmp RF_GetPath
149 RF_GP_1: or al,al
150 jnz RF_GetPath
151 mov cs:RF_FileSpecOfs,bx
152
153 mov es,cs:StoredDS
154 push cs
155 pop ds
156 mov dx,offset DTA
157 mov ah,1Ah
158 int 21h
159 mov si,offset SysFileSpec
160 call CopyFileSpec
161 mov dx,offset Path
162 mov cx,0000000000100011b
163 FindFirst
164 jc Init20
165 Init10: push cs
166 pop ds
167 mov si,offset DTA+1Eh
168 call CopyFileSpec
169 mov dx,offset Path
170 call ReadFile
171 push cs
172 pop ds
173 mov dx,offset DTA
174 FindNext
175 jnc Init10
176 Init20: cmp byte ptr es:[80h],0
177 jz Init25
178 mov byte ptr cs:SkipTitle?,1
179 Init25: mov di,81h
180 InitCycle: xor cx,cx
181 mov cl,ES:[80h]
182 or cx,cx
183 je InitCycle2
184 cld
185 mov al,' '
186 repe scasb
187 InitCycle2: je InitCont_J
188 cmp byte ptr es:[di-1],'/'
189 jne i_not_option
190 mov ax,word ptr es:[di]
191 cmp ah,' '
192 je i_opt_ok
193 cmp ah,0Dh
194 jne i_unknown
195 i_opt_ok: cmp al,'?'
196 jne i_not_help
197 push cs
198 pop ds
199 mov dx,offset i_help_mes
200 mov ah,9
201 int 21h
202 jmp i_halt
203 i_not_help: or al,20h
204 cmp al,'k'
205 jne i_unknown
206 push ds
207 mov ax,Keyboard
208 mov ds,ax
209 assume ds:Keyboard
210 mov K_KeyboardRet1,0CBh
211 mov K_KeyboardRet2,0CBh
212 mov K_KeyboardRet3,0CBh
213 mov K_KeyboardRet4,0CBh
214 pop ds
215 assume ds:nothing
216 inc di
217 dec cx
218 or cx,cx
219 jz InitCont_J
220 mov es:[80h],cl
221 jmp InitCycle
222 i_unknown: mov dx,offset UnknownMes
223 push cs
224 pop ds
225 push ax
226 mov ah,9
227 int 21h
228 mov ah,2
229 pop dx
230 cmp dl,2Dh
231 je i_blank_prm
232 int 21h
233 i_blank_prm: mov dl,0Ah
234 int 21h
235 i_halt: mov ax,4C02h
236 int 21h
237 ; exit 2
238 i_not_option: cmp byte ptr es:[di-1],'-'
239 mov cs:RunFile?,1
240 ESD_0: jne ESD_1
241 mov cs:RunFile?,0
242 repe scasb
243 je InitCont_J
244 ESD_1: lea si,[di-1]
245 repne scasb
246 jne InitCycle3
247 dec di
248 InitCycle3: xor al,al
249 stosb
250 mov ES:[80h],cl
251
252 push di ds es
253 mov di,offset Path
254 push es
255 pop ds
256 push cs
257 pop es
258 xor dl,dl
259 AddExtLoop: lodsb
260 stosb
261 cmp al,'.'
262 jne AE_1
263 mov dl,1
264 AE_1: cmp al,'\'
265 jne AE_2
266 xor dl,dl
267 AE_2: or al,al
268 jnz AddExtLoop
269 dec di
270 mov cx,5
271 mov si,offset DefaultExt
272 push cs
273 pop ds
274 or dl,dl
275 jnz DontAddExt
276 rep movsb
277 DontAddExt: mov dx,offset Path
278 call ReadFile
279 pop es ds di
280
281 jmp InitCycle
282 InitCont_J: jmp InitCont
283
284 DefaultExt db '.APL',0
285
286
287
288 RF_DS_SI label dword
289 RF_SI dw ?
290 RF_DS dw ?
291 ReadFile: mov cs:[InitErrBuf],dx ; DS:DX - read file name
292 mov cs:[InitErrBuf][2],ds
293 mov cs:RF_SI,dx
294 mov cs:RF_DS,ds
295 mov ax,3D00h
296 int 21h
297 jc InitErrNC
298 xchg ax,bx
299 push cs
300 pop ds
301 mov dx,offset InitFileAdr
302 mov cx,4
303 mov ah,3Fh
304 int 21h
305 jc InitErrC
306 mov ax,Apple
307 mov ds,ax
308 mov dx,CS:InitFileAdr
309 mov cx,CS:InitFileLen
310 mov ax,dx
311 add ax,cx
312 jnc RF_NotBig
313 sub cx,ax ;Decrease file length to fit in Apple segment
314 RF_NotBig: cmp cs:RunFile?,0
315 jz ESD_2
316 push cx si di ds es
317 push ds
318 pop es
319 push cs
320 pop ds
321 mov si,offset SlotPrg
322 mov di,0C700h
323 mov cx,SlotLen
324 rep movsb
325 mov di,0C700h
326 mov ds:SlotLen[di],dx
327 pop es ds di si cx
328 ESD_2: mov ah,3Fh
329 int 21h
330 jc InitErrC
331 mov cs:InitFileLen,ax
332 mov ah,3Eh
333 int 21h
334 jc InitErrNC
335 lds si,cs:RF_DS_SI
336 mov ax,cs:InitFileAdr
337 mov bx,cs:InitFileLen
338 mov ch,FF_SHOWADDR? or FF_MODIFYADDR? or FF_MODIFYTYPE?
339 mov cl,FD_CODE
340 call FileIsLoaded
341 ret
342
343 InitErrC: mov ah,3Eh
344 int 21h
345 InitErrNC: push cs
346 pop ds
347 mov dx,offset InitErrMes1
348 mov ah,9
349 int 21h
350 les di,dword ptr CS:[InitErrBuf]
351 xor ax,ax
352 mov cx,ax
353 dec cx
354 cld
355 repne scasb
356 dec di
357 mov al,'$'
358 stosb
359 lds dx,dword ptr CS:[InitErrBuf]
360 mov ah,9
361 int 21h
362 push cs
363 pop ds
364 mov dx,offset InitErrMes2
365 mov ah,9
366 int 21h
367 mov ax,4C01h
368 int 21h
369 ; exit 1
370 InitCont: pop es ds
371 ret
372
373 RF_FileSpecOfs dw ?
374 CopyFileSpec: push ax si di ds es
375 mov ax,Startup
376 mov ds,ax
377 mov es,ax
378 mov di,cs:RF_FileSpecOfs
379 cld
380 CopyFileSpecLp: lodsb
381 stosb
382 or al,al
383 jnz CopyFileSpecLp
384 pop es ds di si ax
385 ret
386
387 SysFileSpec db '*.ROM',0
388
389 InitFileAdr dw 0
390 InitFileLen dw 0
391
392 InitErrBuf dw 2 dup (0)
393
394 UnknownMes db 0Dh,0Ah,' Bad command line parameter: /$'
395 InitErrMes1 db 0Dh,0Ah,' APPLER: Can''t read file $'
396 InitErrMes2 db 0Dh,0Ah,'$'
397 i_help_mes db 0Dh,0Ah
398 db ' Appler - an Apple ][ emulator by Emil Dotchevski & Alexander Patalenski',0Dh,0Ah,0Dh,0Ah
399 db ' Command line syntax: appler [[-]<filename[.APL]>] ... [/k] [/?]',0Dh,0Ah
400 db ' <filename> - ''.APL'' file to load (use ''-'' to disable file execution)',0Dh,0Ah
401 db ' /k - don''t set keyboard params',0Dh,0Ah
402 db ' /? - this message',0Dh,0Ah
403 db '$'
404
405 SlotPrg db 0A9h,20h,0A9h,0,0A9h,3,0A9h,3Ch,4Ch
406 SlotEnd label byte
407 SlotLen = offset SlotEnd - offset SlotPrg
408 CommandLine endp
409
410
411
412 ; OpenDiskFile Entry Params:
413 ; DS:DX^ -- Filename
414 ; AL -- Access Mode: 0 - Don't Change, else Read Only
415 ; BL -- Type: 0 - Nibble, 1 - DOS 3.3
416 ; BH -- Volume (for DOS 3.3 type only)
417 ; CF -- 0 - Disk1, 1 - Disk2
418 InsertDisks proc near
419 push ds
420 push cs
421 pop ds
422 mov dx,offset ID_nameDSK
423 mov bl,1
424 mov bh,0FEh
425 mov al,0
426 clc
427 call OpenDiskFile
428 jnc ID_Ret
429 mov dx,offset ID_nameNBL
430 mov bl,0
431 mov al,0
432 clc
433 call OpenDiskFile
434 ID_Ret: pop ds
435 ret
436 ID_nameNBL db 'APPLER.NBL',0
437 ID_nameDSK db 'APPLER.DSK',0
438 InsertDisks endp
439
440
441
442 Advertisement proc near
443 push ds es
444 push cs
445 pop ds
446 cmp SkipTitle?,0
447 jnz a_SkipTitle
448 mov ax,0B800h
449 mov es,ax
450 mov di,80*24*2
451 mov cx,80
452 xor ax,ax
453 cld
454 rep stosw
455 mov si,offset a_picture
456 push es
457 push cs
458 pop es
459 mov ax,1201h
460 mov bl,30h
461 int 10h
462 mov ax,83h
463 int 10h
464 mov ax,1110h
465 mov cx,76
466 mov bx,0E00h
467 mov dx,0B0h
468 mov bp,offset a_GraphSet
469 int 10h
470 mov ah,01h
471 mov cx,2000h
472 int 10h
473 mov ax,1202h
474 mov bl,30h
475 int 10h
476 mov ax,1000h
477 mov bx,2A0Ah
478 int 10h
479 mov bx,260Eh
480 int 10h
481 mov bx,2406h
482 int 10h
483 mov bx,1C03h
484 int 10h
485 mov ax,1003h
486 mov bl,0
487 int 10h
488 cld
489 pop es
490 xor di,di
491 mov ah,7
492 mov cx,80*24
493 a_loop: lodsb
494 or al,al
495 jnz a_not_attr
496 lodsb
497 mov ah,al
498 jmp a_loop
499 a_not_attr: stosw
500 loop a_loop
501 xor ax,ax
502 int 16h
503 a_SkipTitle: pop es ds
504 ret
505
506 SkipTitle? db 0
507 Buffer1000h label byte
508 a_picture db 0,03h,'ÐÜññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññññÝÑ'
509 db 0,03h,'ð ',0,00Ah,'Ð',0,0AFh,' ',0,00Ah,'Ñ',0,03,' ð'
510 db 0,03h,'ð ',0,0A0h,' ÐððððððððððÑ ÙððÑ ',0,03,' ð'
511 db 0,03h,'ð ',0,0E0h,' ðððÜññññÝððð ððð ôõ ',0,03,' ð'
512 db 0,03h,'ð ',0,0E0h,' ððð ððð ÙðððððððððððÑ ÙðððððððððððÑ ððð ÐððððððððððÑ ÙððÑÐððððððÑ ',0,03,' ð'
513 db 0,03h,'ð ',0,060h,' ðððÚ Ûððð ðððÜññññÝððð ðððÜññññÝððð ððð ðððÜññññÝððð ðððÜñññÝððð ',0,03,' ð'
514 db 0,03h,'ð ',0,060h,' ðððððððððððð ððð ððð ððð ððð ððð ðððÞòòòòßððð ððð Öñ× ',0,03,' ð'
515 db 0,03h,'ð ',0,040h,' ðððÜññññÝððð ððð ððð ððð ððð ððð ðððððððððððÓ ððð ',0,03,' ð'
516 db 0,03h,'ð ',0,040h,' ððð ððð ðððÞòòòòßððð ðððÞòòòòßððð ððð ðððä Û ððð ',0,03,' ð'
517 db 0,03h,'ð ',0,050h,' ÛðððÚ ÛðððÚ ðððððððððððÓ ðððððððððððÓ ÛðððÚ ÒððððððððððÓ ÛðððÚ ',0,03,' ð'
518 db 0,03h,'ð ',0,050h,' ðððØ ðððØ ',0,03,' ð'
519 db 0,03h,'ð ',0,010h,' ÛðððÚ ÛðððÚ ',0,03,' ð'
520 db 0,03h,'ð ',0,001h,'Ò',0,01Fh,' ',0,001h,'Ó',0,03,' ð'
521 db 0,03h,'ð ð'
522 db 0,03h,'ð ',0,00Fh,' ÐÜñÝÑ ',0,008h,'The Best!',0,00Fh,' ÙÑ ÝÑ ÐÜ ÐÜññù ÙÑ ÛÑÚ ',0,03,' ð'
523 db 0,03h,'ð ',0,00Fh,' ðÚ Ûð ÐÜñÝÑ ÐÜñÝÑ ð ÐèñéÑ ð ð ðÞòò ÙêíðíÑ ð ð ð ÐÜÝêÙðØ ÐÜÝÑÙêÜÝÑ ',0,03,' ð'
524 db 0,03h,'ð ',0,00Fh,' ðÜñÝð ðÚ Ûð ðÚ Ûð ð ðèññ× Ûð ðÚ ðä ð ð ð ðÚÛð ð ðÚÛð ðÚ ÛðÚÛð ð ',0,03,' ð'
525 db 0,03h,'ð ',0,00Fh,' ñ ñ ðÜññ× ðÜññ× ñ Öñññ× ñ× Öñ Öññññ ñ ñ ñ Öñ×Öâñ Öñ×ÖâÖññ×Öññ× ñ ',0,03,' ð'
526 db 0,03h,'ð ',0,00Fh,' ñ ñ ',0,008h,'°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈ ',0,03,' ð'
527 db 0,03h,'ð ð'
528 db 0,03h,'ð ',0,00Bh,' by Alexander Patalenski & Emil Dotchevski ',0,03,' ð'
529 db 0,03h,'ð ',0,00Fh,' óóóóóóóóóóóóóóóóóóóóóóóóóóóóóóóóóóóóóóóóóóó ',0,03,' ð'
530 db 0,03h,'ð ',0,00Bh,' https://github.com/zajo/appler ',0,03,' ð'
531 db 0,03h,'ÒÞòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòßÓ'
532 end_ega_picture label byte
533 db 1000h - (offset end_ega_picture - offset a_picture) dup (0)
534 Advertisement endp
535
536
537 HookVectors proc near
538 push ds es
539 mov ax,3509h
540 int 21h
541 mov word ptr CS:[OldKbd],bx
542 mov word ptr CS:[OldKbd][2],es
543 mov al,1
544 int 21h
545 mov word ptr CS:[OldDebug],bx
546 mov word ptr CS:[OldDebug][2],es
547 mov al,24h
548 int 21h
549 mov word ptr CS:[OldCriticalErr],bx
550 mov word ptr CS:[OldCriticalErr][2],es
551 mov ax,seg k_int09
552 mov ds,ax
553 mov dx,offset k_int09
554 mov ax,2509h
555 int 21h
556 mov bx,seg WaitInstrEnd
557 mov ds,bx
558 mov dx,offset WaitInstrEnd
559 mov al,1
560 int 21h
561 mov bx,seg CriticalErrProc
562 mov ds,bx
563 mov dx,offset CriticalErrProc
564 mov al,24h
565 int 21h
566 pop es ds
567 ret
568
569 OldKbd dd 0
570 OldDebug dd 0
571 OldCriticalErr dd 0
572 HookVectors endp
573
574
575
576 UnHookVectors proc near
577 push ds
578 lds dx,cs:OldDebug
579 mov ax,2501h
580 int 21h
581 lds dx,cs:OldKbd
582 mov al,9
583 int 21h
584 lds dx,cs:OldCriticalErr
585 mov al,24h
586 int 21h
587 pop ds
588 ret
589 UnHookVectors endp
590
591
592 CriticalErrProc proc far
593 mov al,3
594 iret
595 CriticalErrProc endp
596
597
598
599 InitKeyboard proc near
600 push ds
601 xor ax,ax
602 mov ds,ax
603 mov ds:[417h],ax
604 call UpdateKeyboard
605 mov ax,Keyboard
606 mov ds,ax
607 assume ds:Keyboard
608 xor ax,ax
609 mov ds:k_Shifts,ax
610 call SetLEDs
611 assume ds:nothing
612 pop ds
613 ret
614 InitKeyboard endp
615
616
617
618 UnInitKeyboard proc near
619 push ax si ds
620 xor ax,ax
621 call SetLEDs
622 mov ds,ax
623 mov ds:[417h],ax
624 UIK_Loop1: mov ah,1
625 int 16h
626 jz UIK_ok
627 xor ax,ax
628 int 16h
629 jmp UIK_Loop1
630 UIK_ok: pop ds si ax
631 ret
632 UnInitKeyboard endp
633
634
635
636 SaveDosScr: push ds es
637 mov ah,0Fh
638 int 10h
639 mov cs:ModeSvd,al
640 mov cs:PageSvd,bh
641 mov ah,3
642 int 10h
643 mov cs:CursorSvd,dx
644 mov cs:CursorShapeSVD,cx
645 mov cx,80 * 25
646 mov si,0B800h
647 mov ds,si
648 push cs
649 pop es
650 xor si,si
651 mov di,offset DosScrSvd
652 cld
653 rep movsw
654 mov cx,2021h
655 mov ah,1
656 int 10h
657 pop es ds
658 ret
659
660 RestoreDosScr: push ds es
661 mov ah,0Fh
662 int 10h
663 xor ah,ah
664 cmp al,2
665 jb RDS_Set
666 cmp al,cs:ModeSvd
667 je RDS_DontSet
668 RDS_Set: mov al,cs:ModeSvd
669 int 10h
670 RDS_DontSet: mov al,cs:PageSvd
671 mov al,0
672 mov ah,5
673 int 10h
674 mov bh,cs:PageSvd
675 mov ah,2
676 mov dx,cs:CursorSvd
677 int 10h
678 mov ah,1
679 mov cx,cs:CursorShapeSVD
680 int 10h
681 mov cx,80 * 25
682 mov si,0B800h
683 mov es,si
684 push cs
685 pop ds
686 xor di,di
687 mov si,offset DosScrSvd
688 cld
689 rep movsw
690 pop es ds
691 ret
692
693 DosScrSvd dw 80 * 25 dup (0)
694 ModeSvd db 0
695 PageSvd db 0
696 CursorSvd dw 0
697 CursorShapeSVD dw 0
698
699
700 DS_CurrentVM db ?
701 DosShell proc far
702 push ax bx cx dx si di bp ds es
703 mov ah,0Fh
704 int 10h
705 mov cs:DS_CurrentVM,al
706 mov ah,62h
707 int 21h
708 mov es,bx
709 mov ds,es:[2Ch]
710 mov es,es:[2Ch]
711 xor di,di
712 mov si,di
713 mov bx,di
714 cld
715 DS_FindEnd: lodsb
716 inc bx
717 or al,al
718 jnz DS_FindEnd
719 lodsb
720 inc bx
721 or al,al
722 jnz DS_FindEnd
723 xor ax,ax
724 push cs
725 pop ds
726 DS_ScanLoop: mov si,offset DS_ComSpecStr
727 mov di,ax
728 mov cx,8
729 rep cmpsb
730 je DS_Found
731 inc ax
732 dec bx
733 jnz DS_ScanLoop
734 jmp DS_Ret
735 DS_Found: push di es
736 call SystemTINI
737 call StartupOFF
738 pop es di
739 push cs
740 pop ds
741 mov dx,offset DS_Message
742 mov ah,9
743 int 21h
744 push es
745 pop ds
746 push cs
747 pop es
748 mov dx,di
749 mov bx,offset DS_EPB
750 mov cs:DS_save_ss,ss
751 mov cs:DS_save_sp,sp
752 mov ax,4B00h
753 int 21h
754 mov ss,cs:DS_save_ss
755 mov sp,cs:DS_save_sp
756 jnc DS_ok
757 push cs
758 pop ds
759 mov dx,offset DS_NoMemMes
760 mov ah,9
761 int 21h
762 DS_WaitEsc: xor ax,ax
763 int 16h
764 cmp al,27
765 jne DS_WaitEsc
766 DS_ok: call StartupON
767 call SystemINIT
768 DS_Ret: mov ah,0Fh
769 int 10h
770 cmp al,cs:DS_CurrentVM
771 je DS_DontSet
772 xor ax,ax
773 mov al,cs:DS_CurrentVM
774 int 10h
775 DS_DontSet: cmp al,3
776 je RS_Exit
777 mov ax,seg C050
778 mov es,ax
779 assume es:seg C050
780 mov al,es:C050
781 mov bp,12 ; Set Screen
782 call SIO_Services
783 assume es:nothing
784 RS_Exit: pop es ds bp di si dx cx bx ax
785 ret
786
787 DS_ComSpecStr db 'COMSPEC='
788 DS_EPB dw 0
789 dw offset DS_CMDline, seg DS_CMDline
790 dd 2 dup (0)
791 DS_CMDline db 0,0Dh
792 DS_save_ss dw ?
793 DS_save_sp dw ?
794 DS_Message db 0Dh,0Ah,'Enter ''EXIT'' to return to APPLER...$'
795 DS_NoMemMes db 0Dh,'Can''t run command interpreter (not enough memory?)'
796 db 0Dh,0Ah,0Ah,' Press <Esc> to return to APPLER',0Dh,0Ah,'$'
797 DosShell endp
798
799
800
801 assume DS:nothing
802 QuitAppler proc far
803 call SystemTINI
804 call StartupOFF
805 push cs
806 pop ds
807 mov dx,offset ExitMes
808 mov ah,9
809 int 21h
810 mov ax,4C00h
811 int 21h
812 ; exit 0 ; Normal Program EXIT
813 QuitAppler endp
814
815 ExitMes db 0Ah,0Dh,' Back to reality (of sorts)...',0Ah,0Dh,'$'
816
817
818 Screen label word
819 a_BegSet label byte
820 a_GraphSet db 000h,000h,000h,000h,08Ah,08Bh,0AAh
821 db 0AAh,0AAh,052h,000h,000h,000h,000h
822 db 000h,000h,014h,007h,094h,054h,014h
823 db 014h,014h,013h,000h,000h,000h,000h
824 db 000h,000h,020h,038h,020h,021h,021h
825 db 021h,0A5h,018h,000h,000h,000h,000h
826 db 000h,000h,000h,000h,0CEh,029h,029h
827 db 0C9h,009h,0E9h,000h,000h,000h,000h
828 db 000h,000h,008h,008h,00Eh,009h,009h
829 db 009h,009h,00Eh,000h,000h,000h,000h
830 db 000h,000h,000h,000h,048h,048h,048h
831 db 048h,038h,008h,008h,070h,000h,000h
832 db 000h,000h,040h,070h,042h,042h,042h
833 db 042h,04Ah,031h,000h,000h,000h,000h
834 db 000h,000h,000h,000h,026h,029h,0A9h
835 db 0A9h,0A9h,046h,000h,000h,000h,000h
836 db 000h,000h,000h,000h,00Eh,009h,009h
837 db 009h,009h,00Eh,008h,008h,000h,000h
838 db 000h,000h,000h,000h,031h,04Ah,04Ah
839 db 04Ah,04Ah,031h,000h,000h,000h,000h
840 db 000h,000h,000h,000h,094h,05Ah,050h
841 db 050h,050h,090h,000h,000h,000h,000h
842 db 000h,000h,010h,010h,01Ch,012h,012h
843 db 012h,012h,01Ch,000h,000h,000h,000h
844 db 000h,000h,006h,002h,092h,092h,092h
845 db 092h,092h,06Ah,000h,000h,000h,000h
846 db 000h,000h,000h,000h,069h,092h,092h
847 db 092h,092h,071h,010h,010h,0E0h,000h
848 db 000h,000h,000h,000h,0CAh,04Dh,048h
849 db 048h,048h,0A8h,000h,000h,000h,000h
850 db 000h,000h,040h,000h,04Eh,052h,052h
851 db 052h,052h,04Dh,000h,000h,000h,000h
852 db 000h,000h,000h,000h,070h,048h,048h
853 db 048h,048h,048h,000h,000h,000h,000h
854 db 000h,000h,000h,000h,072h,04Bh,04Ah
855 db 04Ah,04Ah,072h,040h,040h,000h,000h
856 db 000h,000h,000h,000h,08Ch,052h,012h
857 db 012h,012h,00Ch,000h,000h,000h,000h
858 db 000h,000h,000h,000h,06Ah,093h,092h
859 db 092h,092h,072h,010h,0E0h,000h,000h
860 db 000h,000h,000h,000h,08Eh,052h,012h
861 db 012h,012h,00Dh,000h,000h,000h,000h
862 db 000h,000h,000h,000h,079h,055h,055h
863 db 055h,055h,055h,000h,000h,000h,000h
864 db 000h,000h,000h,000h,0E3h,054h,054h
865 db 057h,054h,053h,000h,000h,000h,000h
866 db 000h,000h,000h,000h,028h,0B5h,0A0h
867 db 0A0h,020h,0A1h,000h,000h,000h,000h
868 db 000h,000h,000h,000h,0C0h,000h,0C0h
869 db 020h,020h,0C0h,000h,000h,000h,000h
870 db 000h,000h,000h,000h,000h,000h,000h
871 db 000h,000h,000h,000h,000h,000h,000h
872 db 000h,000h,000h,000h,000h,000h,000h
873 db 000h,000h,000h,000h,000h,000h,000h
874 db 000h,000h,000h,000h,000h,000h,000h
875 db 000h,000h,000h,000h,000h,000h,000h
876 db 000h,000h,000h,000h,000h,000h,000h
877 db 000h,000h,000h,000h,000h,000h,000h
878 db 000h,000h,000h,000h,000h,000h,000h
879 db 000h,000h,000h,000h,000h,000h,000h
880 db 000h,000h,000h,000h,000h,000h,000h
881 db 000h,000h,000h,000h,000h,000h,000h
882 db 000h,000h,000h,000h,000h,000h,000h
883 db 000h,000h,000h,000h,000h,000h,000h
884 db 000h,007h,01Fh,03Fh,07Fh,0FFh,0FFh
885 db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh
886 db 000h,0E0h,0F8h,0FCh,0FEh,0FFh,0FFh
887 db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh
888 db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh
889 db 0FFh,0FFh,07Fh,03Fh,01Fh,007h,000h
890 db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh
891 db 0FFh,0FFh,0FEh,0FCh,0F8h,0E0h,000h
892 db 000h,000h,000h,000h,000h,000h,000h
893 db 000h,007h,01Fh,03Fh,07Fh,0FFh,0FFh
894 db 000h,000h,000h,000h,000h,000h,000h
895 db 000h,0E0h,0F8h,0FCh,0FEh,0FFh,0FFh
896 db 0FFh,0FFh,07Fh,03Fh,01Fh,007h,000h
897 db 000h,000h,000h,000h,000h,000h,000h
898 db 0FFh,0FFh,0FEh,0FCh,0F8h,0E0h,000h
899 db 000h,000h,000h,000h,000h,000h,000h
900 db 0FFh,0F8h,0E0h,0C0h,080h,000h,000h
901 db 000h,000h,000h,000h,000h,000h,000h
902 db 0FFh,01Fh,007h,003h,001h,000h,000h
903 db 000h,000h,000h,000h,000h,000h,000h
904 db 000h,000h,000h,000h,000h,000h,000h
905 db 000h,000h,080h,0C0h,0E0h,0F8h,0FFh
906 db 000h,000h,000h,000h,000h,000h,000h
907 db 000h,000h,001h,003h,007h,01Fh,0FFh
908 db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh
909 db 0FFh,0F8h,0E0h,0C0h,080h,000h,000h
910 db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh
911 db 0FFh,01Fh,007h,003h,001h,000h,000h
912 db 000h,000h,080h,0C0h,0E0h,0F8h,0FFh
913 db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh
914 db 000h,000h,001h,003h,007h,01Fh,0FFh
915 db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh
916 db 000h,000h,000h,000h,000h,000h,000h
917 db 0FFh,0F8h,0E0h,0C0h,080h,000h,000h
918 db 000h,000h,000h,000h,000h,000h,000h
919 db 0FFh,01Fh,007h,003h,001h,000h,000h
920 db 000h,000h,080h,0C0h,0E0h,0F8h,0FFh
921 db 000h,000h,000h,000h,000h,000h,000h
922 db 000h,000h,001h,003h,007h,01Fh,0FFh
923 db 000h,000h,000h,000h,000h,000h,000h
924 db 0FFh,0F8h,0E0h,0C0h,080h,000h,000h
925 db 000h,000h,080h,0C0h,0E0h,0F8h,0FFh
926 db 0FFh,01Fh,007h,003h,001h,000h,000h
927 db 000h,000h,001h,003h,007h,01Fh,0FFh
928 db 0FFh,0F8h,0E0h,0C0h,0E0h,0F8h,0FFh
929 db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh
930 db 0FFh,01Fh,007h,003h,007h,01Fh,0FFh
931 db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh
932 db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh
933 db 0FFh,0F8h,0E0h,0C0h,0E0h,0F8h,0FFh
934 db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh
935 db 0FFh,01Fh,007h,003h,007h,01Fh,0FFh
936 db 000h,0C3h,0E7h,0FFh,0FFh,0FFh,0FFh
937 db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh
938 db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh
939 db 0FFh,0FFh,0FFh,0FFh,0E7h,0C3h,000h
940 db 000h,000h,000h,000h,000h,000h,000h
941 db 0C3h,0E7h,0FFh,0FFh,0FFh,0FFh,0FFh
942 db 0FFh,0FFh,0FFh,0FFh,0FFh,0E7h,0C3h
943 db 000h,000h,000h,000h,000h,000h,000h
944 db 000h,0C3h,0E7h,0FFh,0FFh,0FFh,0FFh
945 db 000h,000h,000h,000h,000h,000h,000h
946 db 000h,000h,000h,000h,000h,000h,000h
947 db 0FFh,0FFh,0FFh,0FFh,0E7h,0C3h,000h
948 db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh
949 db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh
950 db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh
951 db 000h,000h,000h,000h,000h,000h,000h
952 db 000h,000h,000h,000h,000h,000h,0FFh
953 db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh
954 db 0FFh,000h,000h,000h,000h,000h,000h
955 db 000h,000h,000h,000h,000h,000h,000h
956 db 000h,000h,000h,000h,07Eh,07Eh,018h
957 db 018h,018h,018h,018h,018h,000h,000h
958 db 000h,000h,000h,000h,0C6h,0EEh,0FEh
959 db 0D6h,0C6h,0C6h,0C6h,0C6h,000h,000h
960 db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ; not used
961 db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ; not used
962 db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ; not used
963 db 0FFh,0FFh,0FFh,0FFh,0FFh,0FFh,0FFh ; not used
964 db 007h,01Fh,03Fh,07Fh,0FFh,0FFh,0FFh
965 db 000h,000h,000h,000h,000h,000h,000h
966 db 0E0h,0F8h,0FCh,0FEh,0FFh,0FFh,0FFh
967 db 000h,000h,000h,000h,000h,000h,000h
968 db 000h,000h,000h,000h,000h,000h,000h
969 db 0FFh,0FFh,0FFh,07Fh,03Fh,01Fh,007h
970 db 000h,000h,000h,000h,000h,000h,000h
971 db 0FFh,0FFh,0FFh,0FEh,0FCh,0F8h,0E0h
972 a_EndSet label byte
973 dw (80*26) - ((offset a_EndSet - offset a_BegSet) / 2) dup (0)
974
975 Startup ends
976
977 END StartHere
978
Generated by GNU Enscript 1.6.6, and GophHub 1.3.