1 ; **************************************************************************** 2 ; font2.s (TRDOS 386, TRDOS v2.0 - sample binary file, 'font2.prg') 3 ; ---------------------------------------------------------------------------- 4 ; FONT2.PRG ! TEST program ! TRDOS 386 Video Function (font) test ! 5 ; 6 ; 28/07/2016 7 ; 8 ; [ Last Modification: 29/07/2016 ] 9 ; 10 ; Assembler: NASM 2.11 11 ; 12 ; **************************************************************************** 13 14 ; 19/05/2016 15 ; 29/04/2016 16 ; TRDOS 386 system calls (temporary list!) 17 _ver equ 0 18 _exit equ 1 19 _fork equ 2 20 _read equ 3 21 _write equ 4 22 _open equ 5 23 _close equ 6 24 _wait equ 7 25 _creat equ 8 26 _link equ 9 27 _unlink equ 10 28 _exec equ 11 29 _chdir equ 12 30 _time equ 13 31 _mkdir equ 14 32 _chmod equ 15 33 _chown equ 16 34 _break equ 17 35 _stat equ 18 36 _seek equ 19 37 _tell equ 20 38 _mount equ 21 39 _umount equ 22 40 _setuid equ 23 41 _getuid equ 24 42 _stime equ 25 43 _quit equ 26 44 _intr equ 27 45 _fstat equ 28 46 _emt equ 29 47 _mdate equ 30 48 _video equ 31 49 _audio equ 32 50 _ilgins equ 33 51 _sleep equ 34 52 _msg equ 35 53 _geterr equ 36 54 _rsrvd1 equ 37 55 _pri equ 38 56 _rele equ 39 57 58 %macro sys 1-4 59 ; 29/04/2016 - TRDOS 386 (TRDOS v2.0) 60 ; 03/09/2015 61 ; 13/04/2015 62 ; Retro UNIX 386 v1 system call. 63 %if %0 >= 2 64 mov ebx, %2 65 %if %0 >= 3 66 mov ecx, %3 67 %if %0 = 4 68 mov edx, %4 69 %endif 70 %endif 71 %endif 72 mov eax, %1 73 ;int 30h 74 int 40h ; TRDOS 386 (TRDOS v2.0) 75 %endmacro 76 77 ; TRDOS 386 (and Retro UNIX 386 v1) system call format: 78 ; sys systemcall (eax) , , 79 80 [BITS 32] ; We need 32-bit intructions for protected mode 81 82 [ORG 0] 83 84 start: 85 86 00000000 BE[77000000] mov esi, prg_msg 87 00000005 E81F000000 call print_msg 88 89 0000000A 66B80411 mov ax, 1104h ; load vga 8x16 font 90 0000000E CD31 int 31h 91 92 00000010 66B80311 mov ax, 1103h ; activate vga 8x16 font 93 00000014 CD31 int 31h 94 95 00000016 BE[3D000000] mov esi, font_msg 96 0000001B E809000000 call print_msg 97 98 terminate: 99 sys _exit ; INT 40h 99 <1> 99 <1> 99 <1> 99 <1> 99 <1> %if %0 >= 2 99 <1> mov ebx, %2 99 <1> %if %0 >= 3 99 <1> mov ecx, %3 99 <1> %if %0 = 4 99 <1> mov edx, %4 99 <1> %endif 99 <1> %endif 99 <1> %endif 99 00000020 B801000000 <1> mov eax, %1 99 <1> 99 00000025 CD40 <1> int 40h 100 here: 101 00000027 EBFE jmp short here 102 103 print_msg: 104 00000029 66BB0700 mov bx, 7 105 0000002D B40E mov ah, 0Eh 106 pmsg_loop: 107 0000002F AC lodsb 108 00000030 20C0 and al, al 109 00000032 7404 jz short pmsg_ok 110 00000034 CD31 int 31h ; TRDOS 386 video interrupt 111 00000036 EBF7 jmp short pmsg_loop 112 pmsg_ok: 113 00000038 B410 mov ah, 10h ; Getchar 114 0000003A CD32 int 32h ; TRDOS 386 keyboard interrupt 115 0000003C C3 retn 116 117 font_msg: 118 0000003D 0D0A db 0Dh, 0Ah 119 0000003F 0D0A db 0Dh, 0Ah 120 00000041 56474120464F4E5420- db 'VGA FONT 8x16' 120 0000004A 38783136 121 0000004E 0D0A db 0Dh, 0Ah 122 00000050 303132333435363738- db '0123456789ABCDEFGHIJKLMNOPQRSTUXVWYZ' 122 00000059 394142434445464748- 122 00000062 494A4B4C4D4E4F5051- 122 0000006B 52535455585657595A 123 00000074 0D0A db 0Dh, 0Ah 124 00000076 00 db 0 125 126 prg_msg: 127 00000077 4552444F47414E2054- db 'ERDOGAN TAN - TRDOS 386 - VGA FONT Test Program - FONT2.PRG' 127 00000080 414E202D205452444F- 127 00000089 5320333836202D2056- 127 00000092 474120464F4E542054- 127 0000009B 6573742050726F6772- 127 000000A4 616D202D20464F4E54- 127 000000AD 322E505247 128 000000B2 0D0A db 0Dh, 0Ah, 129 000000B4 32392F30372F323031- db '29/07/2016' 129 000000BD 36 130 000000BE 0D0A db 0Dh, 0Ah 131 000000C0 0D0A db 0Dh, 0Ah 132 000000C2 303132333435363738- db '0123456789ABCDEFGHIJKLMNOPQRSTUXVWYZ' 132 000000CB 394142434445464748- 132 000000D4 494A4B4C4D4E4F5051- 132 000000DD 52535455585657595A 133 000000E6 0D0A db 0Dh, 0Ah 134 000000E8 0D0A db 0Dh, 0Ah 135 000000EA 507265737320616E79- db 'Press any key to continue...' 135 000000F3 206B657920746F2063- 135 000000FC 6F6E74696E75652E2E- 135 00000105 2E 136 00000106 00 db 0 137 00000107 90 align 2 138 00000108 [0A01] dw _end 139 _end: