1 ; **************************************************************************** 2 ; font1.s (TRDOS 386, TRDOS v2.0 - sample binary file, 'font1.prg') 3 ; ---------------------------------------------------------------------------- 4 ; FONT1.PRG ! TEST program ! TRDOS 386 Video Function (font) test ! 5 ; 6 ; 25/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 ; DIRECT CGA MEMORY ACCESS 87 ;xor ebx, ebx 88 00000000 B704 mov bh, 4 ; Direct access/map to CGA memory (0B8000h) 89 ;mov eax, _video ; 1Fh 90 00000002 B01F mov al, 1Fh ; sys _video ; TRDOS 386 Video functions 91 00000004 CD40 int 40h ; TRDOS 386 system call 92 93 ; eax = 0B8000h 94 00000006 21C0 and eax, eax 95 00000008 0F84BA000000 jz terminate ; error (eax = 0) 96 97 0000000E BE[6B010000] mov esi, prg_msg 98 00000013 E8EF000000 call print_msg 99 100 ; set cursor position 101 00000018 B402 mov ah, 2 102 0000001A 6629D2 sub dx, dx ; row 0, column 0 103 0000001D 28FF sub bh, bh ; video page 0 104 0000001F CD31 int 31h 105 106 ;xor ebp, ebp 107 108 _0: 109 00000021 BB[1B010000] mov ebx, color_for_page 110 00000026 BF00800B00 mov edi, 0B8000h 111 ; Fill all pages with characters 112 _1: 113 0000002B 8A23 mov ah, [ebx] 114 0000002D E89F000000 call full_page 115 00000032 43 inc ebx 116 00000033 81FB[23010000] cmp ebx, color_for_page + 8 117 00000039 72F0 jb short _1 118 119 0000003B BB00800B00 mov ebx, 0B8000h 120 _2: 121 00000040 89DF mov edi, ebx 122 00000042 8B35[24010000] mov esi, [msg_font] 123 00000048 E8AF000000 call write_name 124 0000004D 89DF mov edi, ebx 125 0000004F 81C7880F0000 add edi, 4000 - (2*msg_vpg_len) 126 00000055 BE[35010000] mov esi, msg_page 127 0000005A E89D000000 call write_name 128 0000005F 81FB00FD0B00 cmp ebx, 0BFD00h 129 00000065 730E jnb short _3 130 00000067 81C3A00F0000 add ebx, 4000 131 0000006D FE05[40010000] inc byte [msg_pg_num] 132 00000073 EBCB jmp short _2 133 134 _3: 135 00000075 B410 mov ah, 10h 136 00000077 CD32 int 32h 137 138 00000079 45 inc ebp 139 0000007A BE[24010000] mov esi, msg_font 140 0000007F 83FD01 cmp ebp, 1 141 00000082 7715 ja short _5 142 00000084 66B81111 mov ax, 1111h ; load and activate vga 8x14 font 143 00000088 C706[4F010000] mov dword [esi], msg_vga_font_8_14 144 _4: 145 0000008E CD31 int 31h 146 00000090 C605[40010000]30 mov byte [msg_pg_num], '0' 147 00000097 EB88 jmp short _0 148 149 _5: 150 00000099 83FD03 cmp ebp, 3 151 0000009C 771A ja short _7 152 0000009E 740C je short _6 153 000000A0 66B81211 mov ax, 1112h ; load and activate vga 8x8 font 154 000000A4 C706[42010000] mov dword [esi], msg_vga_font_8_8 155 000000AA EBE2 jmp short _4 156 157 _6: 158 000000AC 66B81411 mov ax, 1114h ; load and activate vga 8x16 font 159 000000B0 C706[5D010000] mov dword [esi], msg_vga_font_8_16 160 000000B6 EBD6 jmp short _4 161 162 _7: 163 ; clear video page 0 164 000000B8 66B82007 mov ax, 0720h 165 000000BC 66B9D007 mov cx, 2000 166 000000C0 BF00800B00 mov edi, 0B8000h 167 000000C5 F366AB rep stosw 168 169 terminate: 170 sys _exit ; INT 40h 170 <1> 170 <1> 170 <1> 170 <1> 170 <1> %if %0 >= 2 170 <1> mov ebx, %2 170 <1> %if %0 >= 3 170 <1> mov ecx, %3 170 <1> %if %0 = 4 170 <1> mov edx, %4 170 <1> %endif 170 <1> %endif 170 <1> %endif 170 000000C8 B801000000 <1> mov eax, %1 170 <1> 170 000000CD CD40 <1> int 40h 171 here: 172 000000CF EBFE jmp short here 173 174 full_page: 175 ;mov edi, 0B8000h 176 ;mov ah, 4Eh 177 f_pg_0: 178 000000D1 6650 push ax 179 000000D3 66B82007 mov ax, 0720h 180 000000D7 66B96801 mov cx, 360 181 000000DB F366AB rep stosw 182 000000DE 6658 pop ax 183 000000E0 B205 mov dl, 5 184 f_pg_1: 185 000000E2 B501 mov ch, 1 ; cx = 256 186 000000E4 30C0 xor al, al 187 f_pg_2: 188 000000E6 66AB stosw 189 000000E8 FEC0 inc al 190 000000EA E2FA loop f_pg_2 191 000000EC FECA dec dl 192 000000EE 75F2 jnz short f_pg_1 193 ; 194 000000F0 66B82007 mov ax, 720h 195 000000F4 66B96801 mov cx, 360 196 000000F8 F366AB rep stosw 197 f_pg_3: 198 000000FB C3 retn 199 200 write_name: 201 ; esi = ASCIIZ string address 202 ; edi = destination address 203 000000FC B407 mov ah, 07h 204 w_n1: 205 000000FE AC lodsb 206 000000FF 20C0 and al, al 207 00000101 74F8 jz short f_pg_3 208 00000103 66AB stosw 209 00000105 EBF7 jmp short w_n1 210 211 print_msg: 212 00000107 66BB0700 mov bx, 7 213 0000010B B40E mov ah, 0Eh 214 pmsg_loop: 215 0000010D AC lodsb 216 0000010E 20C0 and al, al 217 00000110 7404 jz short pmsg_ok 218 00000112 CD31 int 31h ; TRDOS 386 video interrupt 219 00000114 EBF7 jmp short pmsg_loop 220 pmsg_ok: 221 00000116 B410 mov ah, 10h ; Getchar 222 00000118 CD32 int 32h ; TRDOS 386 keyboard interrupt 223 0000011A C3 retn 224 225 color_for_page: 226 0000011B 0F0A0B0C0D0E0907 db 0Fh, 0Ah, 0Bh, 0Ch, 0Dh, 0Eh, 09h, 07h 227 228 00000123 00 db 0 229 msg_font: 230 00000124 [28010000] dd msg_current_font 231 msg_current_font: 232 00000128 43555252454E542046- db 'CURRENT FONT' 232 00000131 4F4E54 233 00000134 00 db 0 234 msg_page: 235 00000135 564944454F20504147- db 'VIDEO PAGE ' 235 0000013E 4520 236 msg_pg_num: 237 00000140 30 db '0' 238 msg_vpg_len equ $ - msg_page 239 00000141 00 db 0 240 msg_vga_font_8_8: 241 00000142 56474120464F4E5420- db 'VGA FONT 8x8' 241 0000014B 387838 242 0000014E 00 db 0 243 msg_vga_font_8_14: 244 0000014F 56474120464F4E5420- db 'VGA FONT 8x14' 244 00000158 38783134 245 0000015C 00 db 0 246 msg_vga_font_8_16: 247 0000015D 56474120464F4E5420- db 'VGA FONT 8x16' 247 00000166 38783136 248 0000016A 00 db 0 249 250 prg_msg: 251 0000016B 4552444F47414E2054- db 'ERDOGAN TAN - TRDOS 386 - VGA FONT Test Program - FONT1.PRG' 251 00000174 414E202D205452444F- 251 0000017D 5320333836202D2056- 251 00000186 474120464F4E542054- 251 0000018F 6573742050726F6772- 251 00000198 616D202D20464F4E54- 251 000001A1 312E505247 252 000001A6 0D0A db 0Dh, 0Ah, 253 000001A8 32392F30372F323031- db '29/07/2016' 253 000001B1 36 254 000001B2 0D0A db 0Dh, 0Ah 255 000001B4 507265737320616E79- db 'Press any key to continue...' 255 000001BD 206B657920746F2063- 255 000001C6 6F6E74696E75652E2E- 255 000001CF 2E 256 000001D0 00 db 0 257 000001D1 90 align 2 258 000001D2 [D401] dw _end 259 _end: