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 ',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 [[-]] ... [/k] [/?]',0Dh,0Ah 400 db ' - ''.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 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