1 ; **************************************************************************** 2 ; ttydemo.s (args.s) - Retro Unix 386 v1 - tty output (digital) scroll demo 3 ; ---------------------------------------------------------------------------- 4 ; RETRO UNIX 386 (Retro Unix == Turkish Rational Unix) 5 ; Operating System Project (v0.2) by ERDOGAN TAN (Beginning: 24/12/2013) 6 ; 7 ; [ Last Modification: 11/11/2015 ] 8 ; 9 ; **************************************************************************** 10 ; Assembler: NASM 2.11 11 12 ; 11/11/2015 13 14 ; UNIX v1 system calls 15 _rele equ 0 16 _exit equ 1 17 _fork equ 2 18 _read equ 3 19 _write equ 4 20 _open equ 5 21 _close equ 6 22 _wait equ 7 23 _creat equ 8 24 _link equ 9 25 _unlink equ 10 26 _exec equ 11 27 _chdir equ 12 28 _time equ 13 29 _mkdir equ 14 30 _chmod equ 15 31 _chown equ 16 32 _break equ 17 33 _stat equ 18 34 _seek equ 19 35 _tell equ 20 36 _mount equ 21 37 _umount equ 22 38 _setuid equ 23 39 _getuid equ 24 40 _stime equ 25 41 _quit equ 26 42 _intr equ 27 43 _fstat equ 28 44 _emt equ 29 45 _mdate equ 30 46 _stty equ 31 47 _gtty equ 32 48 _ilgins equ 33 49 _sleep equ 34 ; Retro UNIX 8086 v1 feature only ! 50 _msg equ 35 ; Retro UNIX 386 v1 feature only ! 51 _geterr equ 36 ; Retro UNIX 386 v1 feature only ! 52 53 %macro sys 1-4 54 ; Retro UNIX 386 v1 system call. 55 %if %0 >= 2 56 mov ebx, %2 57 %if %0 >= 3 58 mov ecx, %3 59 %if %0 = 4 60 mov edx, %4 61 %endif 62 %endif 63 %endif 64 mov eax, %1 65 int 30h 66 %endmacro 67 68 ESC equ 1Bh 69 70 ; Retro UNIX 386 v1 system call format: 71 ; sys systemcall (eax) , , 72 73 [BITS 32] ; 32-bit intructions (80386 protected mode) 74 75 [ORG 0] 76 77 START_CODE: 78 sys _write, 1, header, headersize 79 <1> 80 <1> %if %0 >= 2 81 00000000 BB01000000 <1> mov ebx, %2 82 <1> %if %0 >= 3 83 00000005 B9[35010000] <1> mov ecx, %3 84 <1> %if %0 = 4 85 0000000A BA55000000 <1> mov edx, %4 86 <1> %endif 87 <1> %endif 88 <1> %endif 89 0000000F B804000000 <1> mov eax, %1 90 00000014 CD30 <1> int 30h 91 00000016 28C0 sub al, al 92 00000018 A2[8D010000] mov [negative], al 93 0000001D FEC0 inc al 94 0000001F A2[8C010000] mov [shiftbit], al 95 00000024 C605[8F010000]0D mov byte [line], 0Dh ; carriage return 96 nextline: 97 0000002B BF[90010000] mov edi, text 98 ; 99 sys _time 100 <1> 101 <1> %if %0 >= 2 102 <1> mov ebx, %2 103 <1> %if %0 >= 3 104 <1> mov ecx, %3 105 <1> %if %0 = 4 106 <1> mov edx, %4 107 <1> %endif 108 <1> %endif 109 <1> %endif 110 00000030 B80D000000 <1> mov eax, %1 111 00000035 CD30 <1> int 30h 112 00000037 0205[8E010000] add al, [char] 113 0000003D 80D400 adc ah, 0 114 00000040 66A3[8A010000] mov [timeword], ax 115 ; 116 00000046 6689C2 mov dx, ax 117 nextstr: 118 00000049 2401 and al, 1 119 0000004B 0430 add al, '0' 120 0000004D AA stosb ; +0 121 0000004E 28C0 sub al, al 122 00000050 D0CE ror dh, 1 123 00000052 1430 adc al, '0' 124 00000054 AA stosb ; +1 125 00000055 88D0 mov al, dl 126 00000057 30E0 xor al, ah 127 00000059 8A0D[8C010000] mov cl, [shiftbit] 128 0000005F 20C8 and al, cl 129 00000061 7402 jz short _0 130 00000063 B001 mov al, 1 131 _0: 132 00000065 0430 add al, '0' 133 00000067 AA stosb ; +2 134 00000068 08D4 or ah, dl 135 0000006A 20CC and ah, cl 136 0000006C 7402 jz short _1 137 0000006E B401 mov ah, 1 138 _1: 139 00000070 88E0 mov al, ah 140 00000072 0430 add al, '0' 141 00000074 AA stosb ; +3 142 00000075 6689D0 mov ax, dx 143 00000078 30E0 xor al, ah 144 0000007A 20C8 and al, cl 145 0000007C 0430 add al, '0' 146 0000007E AA stosb ; +4 147 0000007F 30C0 xor al, al 148 00000081 D0CA ror dl, 1 149 00000083 1430 adc al, '0' 150 00000085 AA stosb ; +5 151 00000086 28C0 sub al, al 152 00000088 D0CA ror dl, 1 153 0000008A 1430 adc al, '0' 154 0000008C AA stosb ; +6 155 0000008D 30C0 xor al, al 156 0000008F D0CE ror dh, 1 157 00000091 1430 adc al, '0' 158 00000093 AA stosb ; +7 159 00000094 668B15[8A010000] mov dx, [timeword] 160 0000009B FE0D[8D010000] dec byte [negative] 161 000000A1 7824 js short _4 162 000000A3 66F7DA neg dx 163 _2: 164 000000A6 B030 mov al, '0' 165 000000A8 D0EC shr ah, 1 166 000000AA 1400 adc al, 0 167 000000AC AA stosb ; +8 168 000000AD 80E401 and ah, 1 169 000000B0 B055 mov al, 01010101b 170 000000B2 20C8 and al, cl 171 000000B4 7402 jz short _3 172 000000B6 B001 mov al, 1 173 _3: 174 000000B8 30E0 xor al, ah 175 000000BA 0430 add al, '0' 176 000000BC AA stosb ; +9 177 000000BD D0C1 rol cl, 1 178 000000BF 880D[8C010000] mov [shiftbit], cl 179 000000C5 7217 jc short writeline 180 _4: 181 000000C7 FE05[8D010000] inc byte [negative] 182 000000CD 6689D0 mov ax, dx 183 000000D0 74D4 jz short _2 184 000000D2 66D105[8A010000] rol word [timeword], 1 185 000000D9 E96BFFFFFF jmp nextstr 186 writeline: 187 sys _gtty, 0, 0 188 <1> 189 <1> %if %0 >= 2 190 000000DE BB00000000 <1> mov ebx, %2 191 <1> %if %0 >= 3 192 000000E3 B900000000 <1> mov ecx, %3 193 <1> %if %0 = 4 194 <1> mov edx, %4 195 <1> %endif 196 <1> %endif 197 <1> %endif 198 000000E8 B820000000 <1> mov eax, %1 199 000000ED CD30 <1> int 30h 200 000000EF 6609DB or bx, bx 201 000000F2 7426 jz short _5 202 sys _read, 0, char, 1 203 <1> 204 <1> %if %0 >= 2 205 000000F4 BB00000000 <1> mov ebx, %2 206 <1> %if %0 >= 3 207 000000F9 B9[8E010000] <1> mov ecx, %3 208 <1> %if %0 = 4 209 000000FE BA01000000 <1> mov edx, %4 210 <1> %endif 211 <1> %endif 212 <1> %endif 213 00000103 B803000000 <1> mov eax, %1 214 00000108 CD30 <1> int 30h 215 0000010A 803D[8E010000]1B cmp byte [char], ESC 216 00000111 7507 jne short _5 217 ; 218 sys _exit 219 <1> 220 <1> %if %0 >= 2 221 <1> mov ebx, %2 222 <1> %if %0 >= 3 223 <1> mov ecx, %3 224 <1> %if %0 = 4 225 <1> mov edx, %4 226 <1> %endif 227 <1> %endif 228 <1> %endif 229 00000113 B801000000 <1> mov eax, %1 230 00000118 CD30 <1> int 30h 231 _5: 232 sys _write, 1, line, 81 233 <1> 234 <1> %if %0 >= 2 235 0000011A BB01000000 <1> mov ebx, %2 236 <1> %if %0 >= 3 237 0000011F B9[8F010000] <1> mov ecx, %3 238 <1> %if %0 = 4 239 00000124 BA51000000 <1> mov edx, %4 240 <1> %endif 241 <1> %endif 242 <1> %endif 243 00000129 B804000000 <1> mov eax, %1 244 0000012E CD30 <1> int 30h 245 00000130 E9F6FEFFFF jmp nextline 246 247 header: 248 00000135 07 db 07h 249 00000136 0D db 0Dh 250 00000137 2A2A2A20526574726F- db '*** Retro UNIX 386 v1 - TTY (DIGITAL SCROLL) DEMO by Erdogan Tan - 11/11/2015 ***' 251 00000140 20554E495820333836- 252 00000149 207631202D20545459- 253 00000152 20284449474954414C- 254 0000015B 205343524F4C4C2920- 255 00000164 44454D4F2062792045- 256 0000016D 72646F67616E205461- 257 00000176 6E202D2031312F3131- 258 0000017F 2F32303135202A2A2A 259 00000188 0D00 db 0Dh, 0 260 261 headersize equ $ - header 262 263 align 2 264 265 bss_start: 266 267 absolute bss_start 268 269 0000018A timeword: resw 1 270 0000018C shiftbit: resb 1 271 0000018D negative: resb 1 272 ; 273 0000018E char: resb 1 274 0000018F line: resb 1 275 00000190 text: resb 80 276 277 bss_end: