Lines 602-608
Link Here
|
602 |
seg es |
602 |
seg es |
603 |
cmp byte ptr (si),#0 ! empty ? |
603 |
cmp byte ptr (si),#0 ! empty ? |
604 |
je iloop ! yes -> enter interactive mode |
604 |
je iloop ! yes -> enter interactive mode |
605 |
jmp niloop ! enter non-interactive mode |
605 |
|
|
|
606 |
niloop0: |
607 |
br niloop ! enter non-interactive mode |
606 |
|
608 |
|
607 |
! No external parameters after timeout -> boot first image |
609 |
! No external parameters after timeout -> boot first image |
608 |
|
610 |
|
Lines 610-616
Link Here
|
610 |
pop es |
612 |
pop es |
611 |
mov si,#DFLCMD+2 ! default command line ? |
613 |
mov si,#DFLCMD+2 ! default command line ? |
612 |
cmp byte ptr (si),#0 |
614 |
cmp byte ptr (si),#0 |
613 |
jne niloop ! yes -> use it |
615 |
jne niloop0 ! yes -> use it |
614 |
mov ax,nodfl ! no idea how to tell as86 to do jmp (addr) :-( |
616 |
mov ax,nodfl ! no idea how to tell as86 to do jmp (addr) :-( |
615 |
jmp ax ! fall through |
617 |
jmp ax ! fall through |
616 |
|
618 |
|
Lines 618-633
Link Here
|
618 |
! Command input processor |
620 |
! Command input processor |
619 |
|
621 |
|
620 |
iloop: |
622 |
iloop: |
621 |
#if defined(MENU) || defined(BITMAP) |
623 |
#ifdef BITMAP |
622 |
call menu_setup |
624 |
call menu_setup |
623 |
#endif |
625 |
#endif |
624 |
|
626 |
|
625 |
#ifndef BITMAP |
627 |
#ifndef BITMAP |
|
|
628 |
cmp byte gfx_ok,#0 |
629 |
jnz iloop_gfx |
630 |
|
631 |
; load message before doing anything else |
632 |
; the graphics/text stuff is mixed in a rather messy way... |
633 |
|
626 |
;; BEG_FS |
634 |
;; BEG_FS |
627 |
;; SEG_FS ! message disabled ? |
635 |
;; SEG_FS ! message disabled ? |
628 |
cmp word ptr par2_msg_len,#0 ;MSG_OFF+SSDIFF,#0 |
636 |
cmp word ptr par2_msg_len,#0 ;MSG_OFF+SSDIFF,#0 |
629 |
;; END_FS |
637 |
;; END_FS |
630 |
je nomsg ! yes -> skip this |
638 |
; _must_ be 'jz'! |
|
|
639 |
jz iloop_20 ! yes -> skip this |
631 |
call crlf |
640 |
call crlf |
632 |
;BEG_FS |
641 |
;BEG_FS |
633 |
;SEG_FS ! load the message file |
642 |
;SEG_FS ! load the message file |
Lines 641-653
Link Here
|
641 |
call sread |
650 |
call sread |
642 |
call loadfile |
651 |
call loadfile |
643 |
|
652 |
|
|
|
653 |
; es:bx points to file end |
654 |
movzx ebx,bx |
655 |
xor edi,edi |
656 |
mov di,es |
657 |
shl edi,4 |
658 |
add edi,ebx |
659 |
sub edi,#SYSSEG * 16 |
660 |
|
661 |
; edi -> message file size |
662 |
|
644 |
xor bx,bx ! set the terminating NUL and disable further |
663 |
xor bx,bx ! set the terminating NUL and disable further |
645 |
! messages |
664 |
! messages |
646 |
xchg bx,par2_msg_len ;MSG_OFF+SSDIFF |
665 |
xchg bx,par2_msg_len ;MSG_OFF+SSDIFF |
647 |
|
666 |
|
648 |
push #SYSSEG |
667 |
push #SYSSEG |
649 |
pop ds |
668 |
pop ds |
650 |
mov byte ptr (bx),#0 |
669 |
|
|
|
670 |
|
671 |
cmp dword ptr 0,#0x0b2d97f00 ; magic header |
672 |
; _must_ be 'jnz'! |
673 |
jnz iloop_10 |
674 |
|
675 |
push cs |
676 |
pop ds |
677 |
|
678 |
; graphical message |
679 |
|
680 |
call gfx_init |
681 |
push cs |
682 |
pop es |
683 |
cmp byte gfx_ok,#0 |
684 |
jz iloop |
685 |
call gfx_setup_menu |
686 |
iloop_gfx: |
687 |
push cs |
688 |
pop es |
689 |
call gfx_input |
690 |
cmp ax,#1 |
691 |
jz iloop ; text mode |
692 |
mov gfx_tmp,bx |
693 |
jmp near scan_cmdline |
694 |
|
695 |
; normal text message |
696 |
iloop_10: |
697 |
; keep the zero flag! |
698 |
mov byte ptr (bx),#0 |
699 |
push cs |
700 |
pop ds |
701 |
|
702 |
iloop_20: |
703 |
#ifdef MENU |
704 |
pushf |
705 |
call menu_setup |
706 |
popf |
707 |
#endif |
708 |
jnz totxt |
709 |
mov ax,showit |
710 |
mov dx,showit+2 |
711 |
mov bx,ax |
712 |
or bx,dx |
713 |
jz iloop_40 |
714 |
push ds |
715 |
shl dx,12 |
716 |
mov bx,ax |
717 |
and bx,#0xf |
718 |
shr ax,4 |
719 |
add ax,dx |
720 |
add ax,#SYSSEG |
721 |
mov ds,ax |
722 |
call say |
723 |
pop ds |
724 |
xor ax,ax |
725 |
mov showit,ax |
726 |
mov showit+2,ax |
727 |
iloop_40: |
728 |
|
729 |
jmp nomsg |
730 |
|
731 |
showit: |
732 |
.long 0 |
733 |
|
734 |
totxt: |
735 |
push #SYSSEG |
736 |
pop ds |
737 |
|
651 |
xor bx,bx ! display the message |
738 |
xor bx,bx ! display the message |
652 |
call say |
739 |
call say |
653 |
|
740 |
|
Lines 683-694
Link Here
|
683 |
mov al,(si) |
770 |
mov al,(si) |
684 |
inc si |
771 |
inc si |
685 |
jmp gotinp ! go on |
772 |
jmp gotinp ! go on |
686 |
|
|
|
687 |
tolist: |
688 |
#ifdef BITMAP |
689 |
call menu_exit |
690 |
#endif |
691 |
br list ! ... |
692 |
|
773 |
|
693 |
kbinp: mov cx,#brto ! get a key |
774 |
kbinp: mov cx,#brto ! get a key |
694 |
call getkey |
775 |
call getkey |
Lines 715-722
Link Here
|
715 |
je nul ! yes -> go on |
796 |
je nul ! yes -> go on |
716 |
cmp al,#8 ! BS ? |
797 |
cmp al,#8 ! BS ? |
717 |
je todelch ! yes -> erase one character |
798 |
je todelch ! yes -> erase one character |
718 |
cmp al,#13 ! CR ? |
|
|
719 |
je cr ! yes -> go on |
720 |
cmp al,#127 ! DEL ? |
799 |
cmp al,#127 ! DEL ? |
721 |
je todelch ! yes -> erase one character |
800 |
je todelch ! yes -> erase one character |
722 |
ja input ! non-printable -> ignore it |
801 |
ja input ! non-printable -> ignore it |
Lines 724-729
Link Here
|
724 |
je todell ! yes -> erase the line |
803 |
je todell ! yes -> erase the line |
725 |
cmp al,#24 ! ^X ? |
804 |
cmp al,#24 ! ^X ? |
726 |
je todell ! yes -> erase the line |
805 |
je todell ! yes -> erase the line |
|
|
806 |
cmp al,#13 ! CR ? |
807 |
je cr ! yes -> go on |
727 |
cmp al,#32 ! ignore non-printable characters except space |
808 |
cmp al,#32 ! ignore non-printable characters except space |
728 |
jb input |
809 |
jb input |
729 |
ja noblnk ! no space -> go on |
810 |
ja noblnk ! no space -> go on |
Lines 766-771
Link Here
|
766 |
|
847 |
|
767 |
todelch:br delch ! ... |
848 |
todelch:br delch ! ... |
768 |
todell: br delline ! ... |
849 |
todell: br delline ! ... |
|
|
850 |
tolist: |
851 |
#ifdef BITMAP |
852 |
call menu_exit |
853 |
#endif |
854 |
br list ! ... |
769 |
|
855 |
|
770 |
! End of input, process the command line |
856 |
! End of input, process the command line |
771 |
|
857 |
|
Lines 807-812
Link Here
|
807 |
or al,al ! at end ? |
893 |
or al,al ! at end ? |
808 |
jnz cpsav ! no -> go on |
894 |
jnz cpsav ! no -> go on |
809 |
|
895 |
|
|
|
896 |
scan_cmdline: |
810 |
cmp bx,#cmdline ! empty line ? |
897 |
cmp bx,#cmdline ! empty line ? |
811 |
je notrspc ! yes -> boot first image |
898 |
je notrspc ! yes -> boot first image |
812 |
cmp byte ptr (bx-1),#32 ! trailing space ? |
899 |
cmp byte ptr (bx-1),#32 ! trailing space ? |
Lines 864-869
Link Here
|
864 |
je chkvga ! yes -> look for options again |
951 |
je chkvga ! yes -> look for options again |
865 |
or al,al ! at end ? |
952 |
or al,al ! at end ? |
866 |
jnz vsknb ! no -> go on |
953 |
jnz vsknb ! no -> go on |
|
|
954 |
|
955 |
mov bx,gfx_tmp |
956 |
cmp byte gfx_ok,#0 |
957 |
jnz near boot |
958 |
|
867 |
call crlf ! write CR/LF |
959 |
call crlf ! write CR/LF |
868 |
cmp di,#cmdline+1 ! empty line ? |
960 |
cmp di,#cmdline+1 ! empty line ? |
869 |
emptyl: je bfirst ! yes -> boot first image |
961 |
emptyl: je bfirst ! yes -> boot first image |
Lines 1075-1080
Link Here
|
1075 |
;; SEG_FS |
1167 |
;; SEG_FS |
1076 |
mov word ptr par2_timeout,#0xffff ; cancel timeout |
1168 |
mov word ptr par2_timeout,#0xffff ; cancel timeout |
1077 |
;; END_FS |
1169 |
;; END_FS |
|
|
1170 |
|
1171 |
cmp byte gfx_ok,#0 |
1172 |
jz dopw_nogfx |
1173 |
mov di,bx |
1174 |
call gfx_password |
1175 |
pop bx |
1176 |
jnc toboot |
1177 |
jmp near iloop |
1178 |
dopw_nogfx: |
1179 |
|
1078 |
mov bx,#msg_pw ! display a prompt |
1180 |
mov bx,#msg_pw ! display a prompt |
1079 |
call say |
1181 |
call say |
1080 |
|
1182 |
|
Lines 1245-1251
Link Here
|
1245 |
pop bp |
1347 |
pop bp |
1246 |
pop bx |
1348 |
pop bx |
1247 |
or cx,cx ; test CX==0 means all okay |
1349 |
or cx,cx ; test CX==0 means all okay |
1248 |
jz doboot |
1350 |
jnz pwfail |
|
|
1351 |
br doboot |
1249 |
; fall into pwfail |
1352 |
; fall into pwfail |
1250 |
|
1353 |
|
1251 |
#else |
1354 |
#else |
Lines 1302-1317
Link Here
|
1302 |
or cl,cl ! no errors ? |
1405 |
or cl,cl ! no errors ? |
1303 |
jnz pwfail ! no -> fail |
1406 |
jnz pwfail ! no -> fail |
1304 |
cmp byte ptr (si),#0 ! at end ? |
1407 |
cmp byte ptr (si),#0 ! at end ? |
1305 |
je doboot ! yes -> continue booting |
1408 |
jne pwfail ! yes -> continue booting |
|
|
1409 |
br doboot |
1410 |
|
1306 |
#endif /* CRC_PASSWORDS */ |
1411 |
#endif /* CRC_PASSWORDS */ |
1307 |
|
1412 |
|
1308 |
pwfail: mov bx,#msg_pf ! display an error message |
1413 |
pwfail: mov bx,#msg_pf ! display an error message |
1309 |
call say |
1414 |
call say |
1310 |
br iloop ! get next input |
1415 |
br iloop ! get next input |
1311 |
|
1416 |
|
|
|
1417 |
! Test if the monitor can display a vga mode |
1418 |
! mode in ax, returns ax if success, otherwise 0 |
1419 |
montest: |
1420 |
push es |
1421 |
push di |
1422 |
push bx |
1423 |
push cx |
1424 |
push dx |
1425 |
push ax |
1426 |
push #0 |
1427 |
pop es |
1428 |
mov di,#0xfc00 |
1429 |
xor cx,cx |
1430 |
seg es |
1431 |
mov 0xfc23,cx |
1432 |
xor dx,dx |
1433 |
mov bx,#1 |
1434 |
mov ax,#0x4f15 |
1435 |
int 0x10 |
1436 |
cmp ax,#0x4f |
1437 |
pop ax |
1438 |
jnz monno |
1439 |
mov bx,ax |
1440 |
sub bx,#0x100 |
1441 |
cmp bx,#0x1c |
1442 |
jnb monno |
1443 |
seg cs |
1444 |
mov bl,monbits(bx) |
1445 |
xor bh,bh |
1446 |
seg es |
1447 |
mov cx,0xfc23 |
1448 |
or cx,cx |
1449 |
jnz nofsc |
1450 |
call fscscan |
1451 |
nofsc: and cl,#0xfe |
1452 |
bt cx,bx |
1453 |
jc monok |
1454 |
monno: xor ax,ax |
1455 |
monok: pop dx |
1456 |
pop cx |
1457 |
pop bx |
1458 |
pop di |
1459 |
pop es |
1460 |
ret |
1461 |
|
1462 |
monbits: |
1463 |
.byte 5,5,9,9,14,14,15,15,0,0,0,0,0,0,0,0 |
1464 |
.byte 5,5,5,9,9,9,14,14,14,15,15,15 |
1465 |
|
1466 |
! return in cx the bits for FSC notebooks. |
1467 |
fscscan: |
1468 |
push ds |
1469 |
push si |
1470 |
push di |
1471 |
push ax |
1472 |
push bx |
1473 |
push #0xf000 |
1474 |
pop ds |
1475 |
xor di,di |
1476 |
fscnn: cmp dword ptr (di),#0x696a7546 |
1477 |
jnz fscn |
1478 |
cmp dword ptr 4(di),#0x20757374 |
1479 |
jnz fscn |
1480 |
mov cx,#0x20 |
1481 |
xor bx,bx |
1482 |
mov si,di |
1483 |
fscsig: lodsb |
1484 |
add bl,al |
1485 |
dec cx |
1486 |
jnz fscsig |
1487 |
or bl,bl |
1488 |
jnz fscn |
1489 |
mov al,23(di) |
1490 |
and al,#0xf0 |
1491 |
jnz fscbad |
1492 |
mov bl,21(di) |
1493 |
and bx,#0xf0 |
1494 |
shr bx,#3 |
1495 |
seg cs |
1496 |
mov cx,fscbits(bx) |
1497 |
jmp fscok |
1498 |
fscn: add di,#0x10 |
1499 |
jnz fscnn |
1500 |
fscbad: xor cx,cx |
1501 |
fscok: pop bx |
1502 |
pop ax |
1503 |
pop di |
1504 |
pop si |
1505 |
pop ds |
1506 |
ret |
1507 |
|
1508 |
fscbits: |
1509 |
.word 0,0x0020,0x0200,0x4000,0x8000,0x8000,0,0 |
1510 |
.word 0x8000,0,0,0,0,0,0,0 |
1511 |
|
1512 |
! Test if the driver can display a vga mode |
1513 |
! mode in ax, returns ax if success, otherwise 0 |
1514 |
vgatest: |
1515 |
push es |
1516 |
push di |
1517 |
push bx |
1518 |
push cx |
1519 |
push dx |
1520 |
push ax |
1521 |
push #0 |
1522 |
pop es |
1523 |
mov cx,ax |
1524 |
xor ax,ax |
1525 |
seg es |
1526 |
mov 0xfc00+0x28,ax |
1527 |
seg es |
1528 |
mov 0xfc00+0x2a,ax |
1529 |
mov di,#0xfc00 |
1530 |
mov ax,#0x4f01 |
1531 |
int 0x10 |
1532 |
cmp ax,#0x4f |
1533 |
jnz vgano |
1534 |
seg es |
1535 |
mov ax,0xfc00 |
1536 |
and ax,#0x99 |
1537 |
cmp ax,#0x99 |
1538 |
jnz vgano |
1539 |
seg es |
1540 |
mov ax,0xfc00+0x28 |
1541 |
seg es |
1542 |
or ax,0xfc00+0x2a |
1543 |
jz vgano |
1544 |
pop ax |
1545 |
jmp vgayes |
1546 |
vgano: pop ax |
1547 |
xor ax,ax |
1548 |
vgayes: pop dx |
1549 |
pop cx |
1550 |
pop bx |
1551 |
pop di |
1552 |
pop es |
1553 |
ret |
1554 |
|
1312 |
! Boot the image BX points to |
1555 |
! Boot the image BX points to |
1313 |
|
1556 |
|
1314 |
doboot: mov byte ptr prechr,#61 ! switch to equal sign |
1557 |
doboot: |
|
|
1558 |
call gfx_done |
1559 |
mov byte ptr prechr,#61 ! switch to equal sign |
1315 |
push bx ! save image descr |
1560 |
push bx ! save image descr |
1316 |
mov bx,#msg_l ! say hi |
1561 |
mov bx,#msg_l ! say hi |
1317 |
call say |
1562 |
call say |
Lines 1466-1473
Link Here
|
1466 |
jmp vgaset |
1711 |
jmp vgaset |
1467 |
vganorm:test bx,#FLAG_VGA |
1712 |
vganorm:test bx,#FLAG_VGA |
1468 |
jz novga |
1713 |
jz novga |
1469 |
vgaset: seg es |
1714 |
vgaset: |
1470 |
mov [VGA_SET],ax ! magic offset in the boot sector |
1715 |
#ifdef NORMAL_VGA |
|
|
1716 |
cmp ax,#INST_VGA |
1717 |
jnz vganoi |
1718 |
mov ax,#0x117 |
1719 |
call vgatest |
1720 |
or ax,ax |
1721 |
jz vga2 |
1722 |
call montest |
1723 |
or ax,ax |
1724 |
jnz vga3 |
1725 |
vga2: |
1726 |
mov ax,#0x114 |
1727 |
call vgatest |
1728 |
or ax,ax |
1729 |
jz vga4 |
1730 |
call montest |
1731 |
or ax,ax |
1732 |
jnz vga3 |
1733 |
vga4: |
1734 |
mov ax,#0x101 |
1735 |
call vgatest |
1736 |
or ax,ax |
1737 |
jnz vga3 |
1738 |
mov ax,#NORMAL_VGA-0x0200 |
1739 |
vga3: |
1740 |
add ax,#0x200 |
1741 |
#endif |
1742 |
vganoi: seg es |
1743 |
mov [VGA_SET],ax ! magic offset in the boot sector |
1471 |
novga: push bx ! use flags (BX) later |
1744 |
novga: push bx ! use flags (BX) later |
1472 |
test bx,#FLAG_LOCK ! ... lock target ? |
1745 |
test bx,#FLAG_LOCK ! ... lock target ? |
1473 |
jnz lockit ! yup -> do it |
1746 |
jnz lockit ! yup -> do it |
Lines 1480-1487
Link Here
|
1480 |
push es |
1753 |
push es |
1481 |
push si |
1754 |
push si |
1482 |
|
1755 |
|
1483 |
push ds ; |
1756 |
push ds ; |
1484 |
pop es ; |
1757 |
pop es ; |
1485 |
call cmd_write ; write out the command line |
1758 |
call cmd_write ; write out the command line |
1486 |
|
1759 |
|
1487 |
pop si |
1760 |
pop si |
Lines 1494-1500
Link Here
|
1494 |
#endif |
1767 |
#endif |
1495 |
xor cx,cx |
1768 |
xor cx,cx |
1496 |
seg es |
1769 |
seg es |
1497 |
add cl,[VSS_NUM] |
1770 |
add cl,[VSS_NUM] |
1498 |
;;; or cx,cx |
1771 |
;;; or cx,cx |
1499 |
jnz lsetup |
1772 |
jnz lsetup |
1500 |
mov cl,#SETUPSECS ! default is to load four sectors |
1773 |
mov cl,#SETUPSECS ! default is to load four sectors |
Lines 3231-3236
Link Here
|
3231 |
jmp vgaput1 |
3504 |
jmp vgaput1 |
3232 |
#else |
3505 |
#else |
3233 |
xor cx,cx |
3506 |
xor cx,cx |
|
|
3507 |
mov bh,ch |
3508 |
mov bl,#10 ; bx: base (_not_ bl!) |
3234 |
mov ah,cl |
3509 |
mov ah,cl |
3235 |
test byte ptr (si),#0xff ! no value ? |
3510 |
test byte ptr (si),#0xff ! no value ? |
3236 |
jz vgaerr ! yes -> error |
3511 |
jz vgaerr ! yes -> error |
Lines 3239-3255
Link Here
|
3239 |
jz vgaput ! yes -> done |
3514 |
jz vgaput ! yes -> done |
3240 |
cmp al,#32 |
3515 |
cmp al,#32 |
3241 |
je vgaput |
3516 |
je vgaput |
3242 |
cmp al,#48 ! is it a digit ? (0x30=48="0") |
3517 |
cmp al,#0x61 |
3243 |
jb vgaerr ! no -> error |
3518 |
jb vgadig_10 |
3244 |
cmp al,#57 ! 57=0x39="9" |
3519 |
sub al,#0x20 ; upper case |
3245 |
ja vgaerr |
3520 |
vgadig_10: |
3246 |
sub al,#48 ! cx = cx*10+al-'0' |
3521 |
or cx,cx |
3247 |
imul cx,#10 |
3522 |
jnz vgadig_20 |
|
|
3523 |
cmp al,#0x58 |
3524 |
jnz vgadig_20 |
3525 |
mov bl,#16 ; hex |
3526 |
jmp vgadig |
3527 |
vgadig_20: |
3528 |
cmp al,#0x3a |
3529 |
jb vgadig_30 |
3530 |
sub al,#7 |
3531 |
vgadig_30: |
3532 |
sub al,#0x30 |
3533 |
jb vgaerr ; not a digit |
3534 |
cmp al,bl |
3535 |
jae vgaerr ; larger than current base |
3536 |
imul cx,bx |
3537 |
|
3248 |
add cx,ax |
3538 |
add cx,ax |
3249 |
jnc vgadig ! next one |
3539 |
jnc vgadig ! next one |
3250 |
#endif |
3540 |
#endif |
3251 |
|
3541 |
|
3252 |
vgaerr: mov bx,#msg_v ! display an error message |
3542 |
vgaerr: |
|
|
3543 |
mov bx,#msg_v ! display an error message |
3544 |
cmp byte gfx_ok,#0 |
3545 |
jz vgaerr_txt |
3546 |
lea si,(bx+1) ; skip initial NL |
3547 |
xor di,di |
3548 |
mov al,#0 |
3549 |
mov msg_v1,al ; drop final NL |
3550 |
call gfx_infobox |
3551 |
mov byte msg_v1,#10 ; put it back |
3552 |
stc |
3553 |
ret |
3554 |
vgaerr_txt: |
3555 |
|
3253 |
call say |
3556 |
call say |
3254 |
/* ifdef HIGHMEM_MAX */ |
3557 |
/* ifdef HIGHMEM_MAX */ |
3255 |
xor eax,eax |
3558 |
xor eax,eax |
Lines 3270-3275
Link Here
|
3270 |
.ascii "EXT" |
3573 |
.ascii "EXT" |
3271 |
.byte 0 |
3574 |
.byte 0 |
3272 |
.word NORMAL_VGA |
3575 |
.word NORMAL_VGA |
|
|
3576 |
.byte 0 |
3577 |
.word INST_VGA |
3578 |
.ascii "INST" |
3273 |
.ascii "NORMAL" |
3579 |
.ascii "NORMAL" |
3274 |
.byte 0 |
3580 |
.byte 0 |
3275 |
#endif |
3581 |
#endif |
Lines 3350-3356
Link Here
|
3350 |
inc si ! skip '@' |
3656 |
inc si ! skip '@' |
3351 |
call get_K |
3657 |
call get_K |
3352 |
pop edx ! restore size |
3658 |
pop edx ! restore size |
3353 |
jc memerr |
3659 |
;;; jc memerr |
|
|
3660 |
je gmmull |
3661 |
br s2lbad |
3354 |
cmp eax,#1024 ! start : 1meg |
3662 |
cmp eax,#1024 ! start : 1meg |
3355 |
ja gmcopy ! just copy if above |
3663 |
ja gmcopy ! just copy if above |
3356 |
add eax,edx ! EAX = hma/1024 |
3664 |
add eax,edx ! EAX = hma/1024 |
Lines 3360-3366
Link Here
|
3360 |
or bl,#0x20 |
3668 |
or bl,#0x20 |
3361 |
cmp bl,#0x20 ! NUL or SPACE |
3669 |
cmp bl,#0x20 ! NUL or SPACE |
3362 |
#if 0 |
3670 |
#if 0 |
3363 |
jne memerr |
3671 |
;;; jne memerr |
|
|
3672 |
je gmmull |
3673 |
br s2lbad |
3364 |
#else |
3674 |
#else |
3365 |
jne gmcopy ! allow <size>#<start> and <size>$<start> |
3675 |
jne gmcopy ! allow <size>#<start> and <size>$<start> |
3366 |
#endif |
3676 |
#endif |
Lines 3372-3377
Link Here
|
3372 |
gmnocopy: pop bx |
3682 |
gmnocopy: pop bx |
3373 |
ret |
3683 |
ret |
3374 |
|
3684 |
|
|
|
3685 |
#include "gfxlogo.S" |
3375 |
|
3686 |
|
3376 |
memerr: |
3687 |
memerr: |
3377 |
mov bx,#msg_me ! numeric conversion error |
3688 |
mov bx,#msg_me ! numeric conversion error |
Lines 3576-3583
Link Here
|
3576 |
|
3887 |
|
3577 |
msg_v: .byte 10 |
3888 |
msg_v: .byte 10 |
3578 |
.ascii "Valid vga values are ASK, NORMAL, EXTENDED or a " |
3889 |
.ascii "Valid vga values are ASK, NORMAL, EXTENDED or a " |
3579 |
.ascii "decimal number." |
3890 |
.ascii "number." |
3580 |
.byte 10,0 |
3891 |
msg_v1: .byte 10,0 |
3581 |
|
3892 |
|
3582 |
msg_pks:.byte 10 |
3893 |
msg_pks:.byte 10 |
3583 |
.ascii "Invalid hexadecimal number. - Ignoring remaining items." |
3894 |
.ascii "Invalid hexadecimal number. - Ignoring remaining items." |