mirror of
https://github.com/pfusik/xasm.git
synced 2025-02-14 02:30:28 +00:00
GR0 1.0 - modifies MS-DOS font and colors so that it looks like Atari 8-bit.
This commit is contained in:
parent
59a64376fc
commit
1223276618
355
gr0.asm
Normal file
355
gr0.asm
Normal file
@ -0,0 +1,355 @@
|
||||
IDEAL
|
||||
P386
|
||||
MODEL TINY
|
||||
CODESEG
|
||||
ORG 100h
|
||||
include 'fox.mak'
|
||||
smartio = 1
|
||||
|
||||
start:
|
||||
db 2048 dup(0) ;compack
|
||||
|
||||
o_a = 1
|
||||
o_b = 2
|
||||
o_c = 4
|
||||
o_d = 8
|
||||
o_f = 10h
|
||||
o_i = 20h
|
||||
o_l = 40h
|
||||
o_n = 80h
|
||||
o_x = 100h
|
||||
|
||||
MACRO topt _op
|
||||
testflag dx, _op
|
||||
ENDM
|
||||
|
||||
mov si, 81h
|
||||
mov bx, 0ff00h ;bh=attr mask, bl=attr set
|
||||
xor dx, dx ;m_xxx
|
||||
|
||||
gsw1: lodsb
|
||||
cmp al, ' '
|
||||
je gsw1
|
||||
cmp al, 9
|
||||
je gsw1
|
||||
cmp al, 0dh
|
||||
je gswx
|
||||
cmp al, '/'
|
||||
je gsw2
|
||||
cmp al, '-'
|
||||
je gsw2
|
||||
usage: mov dx, offset usgtxt
|
||||
panic: print
|
||||
int 20h
|
||||
|
||||
smartdisk
|
||||
|
||||
rdpage: mov cx, 100h
|
||||
fread
|
||||
cmp ax, 100h
|
||||
jb _derr
|
||||
ret
|
||||
|
||||
rdnum: lodsb
|
||||
cmp al, ':'
|
||||
jne usage
|
||||
lodsw
|
||||
cmp al, '9'
|
||||
ja usage
|
||||
sub al, '0'
|
||||
jb usage
|
||||
cmp ah, '9'
|
||||
ja rdnum1
|
||||
sub ah, '0'
|
||||
jb rdnum1
|
||||
xchg al, ah
|
||||
aad ;al:=10*ah+al
|
||||
cmp al, 15
|
||||
ja usage
|
||||
ret
|
||||
rdnum1: dec si
|
||||
ret
|
||||
|
||||
gsw2: lodsb
|
||||
and al, 0dfh
|
||||
mov di, offset swilet
|
||||
mov cx, 9
|
||||
repne scasb
|
||||
jne usage
|
||||
bts dx, cx
|
||||
jc usage
|
||||
cmp al, 'B'
|
||||
je sw_b
|
||||
cmp al, 'C'
|
||||
je sw_c
|
||||
cmp al, 'F'
|
||||
je sw_f
|
||||
jmp gsw1
|
||||
|
||||
sw_b: call rdnum
|
||||
shl al, 4
|
||||
and bh, 0fh
|
||||
or bl, al
|
||||
jmp gsw1
|
||||
|
||||
sw_c: call rdnum
|
||||
and bh, 0f0h
|
||||
or bl, al
|
||||
jmp gsw1
|
||||
|
||||
sw_f: cmp [byte si], ':'
|
||||
jne usage
|
||||
mov di, offset fname-1
|
||||
swf1: movsb
|
||||
cmp [byte si], ' '
|
||||
je swf2
|
||||
cmp [byte si], 9
|
||||
je swf2
|
||||
cmp [byte si], 0dh
|
||||
jne swf1
|
||||
swf2: pusha
|
||||
mov bx, di
|
||||
mov cx, di
|
||||
sub cx, offset fname
|
||||
je usage
|
||||
adex1: dec bx
|
||||
cmp [byte bx], '.'
|
||||
je adexn
|
||||
cmp [byte bx], '\'
|
||||
loopne adex1
|
||||
adex2: mov eax, 'TNF.'
|
||||
stosd
|
||||
adexn: mov [byte di], 0
|
||||
|
||||
fopen fname
|
||||
mov dx, offset font+100h ;digits
|
||||
call rdpage
|
||||
mov dx, offset font+200h ;letters
|
||||
call rdpage
|
||||
mov dx, offset font ;controls
|
||||
call rdpage
|
||||
mov dx, offset font+300h ;low letters
|
||||
call rdpage
|
||||
fclose
|
||||
popa
|
||||
jmp gsw1
|
||||
|
||||
gswx: test dx, dx
|
||||
jz usage
|
||||
|
||||
topt o_a ;obsluz opcje a
|
||||
jz atrok
|
||||
setflag dx, o_n+o_l
|
||||
topt o_b
|
||||
jnz anob
|
||||
and bx, 0f0fh
|
||||
or bl, 10h
|
||||
anob: topt o_c
|
||||
jnz anoc
|
||||
and bx, 0f0f0h
|
||||
or bl, 7
|
||||
anoc: topt o_d+o_f+o_x
|
||||
jnz atrok
|
||||
setflag dx, o_x
|
||||
atrok:
|
||||
|
||||
mov ax, dx ;sprawdz opcje fontu
|
||||
and ax, o_d+o_f+o_x
|
||||
jz nofnt
|
||||
bsf cx, ax ;dozwolona max 1 z opcji d,f,x
|
||||
btr ax, cx
|
||||
test ax, ax
|
||||
jz fntok
|
||||
jmp usage
|
||||
nofnt: topt o_l ;jezeli l i zadna z d,f,x, to ustaw d
|
||||
jz fntok
|
||||
setflag dx, o_d
|
||||
fntok:
|
||||
|
||||
push bx
|
||||
|
||||
; inicjuj tryb tekstowy
|
||||
topt o_n
|
||||
jz noini
|
||||
push dx
|
||||
mov ax, 3
|
||||
int 10h
|
||||
pop dx
|
||||
noini:
|
||||
|
||||
; wczytaj font domyslny
|
||||
topt o_d
|
||||
jz nodef
|
||||
mov ax, 1112h
|
||||
topt o_l
|
||||
jnz def50
|
||||
mov al, 14h
|
||||
def50: push dx
|
||||
int 10h
|
||||
pop dx
|
||||
nodef:
|
||||
|
||||
; wczytaj font uzytkownika
|
||||
topt o_f+o_x
|
||||
jz nocust
|
||||
|
||||
; ustaw odpowiedni font
|
||||
mov cx, 128
|
||||
topt o_i
|
||||
jz noinv
|
||||
; inwertuj znaki 0-127 na 128-255
|
||||
mov si, offset font
|
||||
mov di, offset ifont
|
||||
mov cx, 1024
|
||||
mkinv: lodsb
|
||||
not al
|
||||
stosb
|
||||
loop mkinv
|
||||
mov cx, 256
|
||||
noinv: mov bp, offset font
|
||||
mov bx, 800h
|
||||
topt o_l
|
||||
jnz nodbl
|
||||
; rob font o podwojonej wysokosci
|
||||
mov si, offset font
|
||||
mov di, offset dfont
|
||||
push cx
|
||||
mov cx, 2048
|
||||
mkdbl: lodsb
|
||||
mov ah, al
|
||||
stosw
|
||||
loop mkdbl
|
||||
pop cx
|
||||
mov bp, offset dfont
|
||||
mov bh, 16
|
||||
nodbl: push dx
|
||||
xor dx, dx
|
||||
mov ax, 1110h
|
||||
int 10h
|
||||
pop dx
|
||||
|
||||
nocust:
|
||||
; jezeli przelaczylismy 50->25 to skorygowac polozenie kursora
|
||||
topt o_l
|
||||
jnz nococu
|
||||
topt o_d+o_f+o_x
|
||||
jz nococu
|
||||
xor bh, bh
|
||||
mov ah, 3
|
||||
int 10h ;wez pozycje kursora
|
||||
sub dh, 25
|
||||
jb nococu
|
||||
xor bh, bh
|
||||
mov ah, 2
|
||||
int 10h ;ustaw kursor
|
||||
mov ax, 0b800h ;przesuwa dolna polowke ekranu do gory
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
mov si, 2*80*25
|
||||
xor di, di
|
||||
mov cx, si
|
||||
rep movsb
|
||||
mov ax, [di] ;czysci dolna polowke
|
||||
mov al, ' '
|
||||
mov cx, 80*25
|
||||
rep stosw
|
||||
push cs
|
||||
pop ds
|
||||
push cs
|
||||
pop ds
|
||||
|
||||
nococu:
|
||||
; ustaw kolory
|
||||
pop bx
|
||||
cmp bh, 0ffh
|
||||
je nocol
|
||||
push 0b800h
|
||||
pop es
|
||||
xor di, di
|
||||
mov cx, 80*50
|
||||
cls: inc di
|
||||
and [es:di], bh
|
||||
or [es:di], bl
|
||||
inc di
|
||||
loop cls
|
||||
nocol: ret
|
||||
|
||||
swilet db 'XNLIFDCBA'
|
||||
usgtxt db 'GR0 version 1.0 by Fox/Taquart',eol
|
||||
db 'Customizes DOS screen.',eol
|
||||
db 'Available options:',eol
|
||||
db '/a Set Atari scheme = /b:1 /c:7 /n /l /x',eol
|
||||
db '/b:nn Set background color 0-15',eol
|
||||
db '/c:nn Set foreground color 0-15',eol
|
||||
db '/d Set default PC font',eol
|
||||
db '/f:fname Set external Atari font',eol
|
||||
db '/i Set chars 128-255 to inverse',eol
|
||||
db '/l Select 50 lines font',eol
|
||||
db '/n Initialize text mode (clears screen)',eol
|
||||
db '/x Set Atari build-in font',eot
|
||||
smarterr
|
||||
|
||||
font db 0,54,127,127,62,28,8,0,24,24,24,31,31,24,24,24,3
|
||||
db 3,3,3,3,3,3,3,24,24,24,248,248,0,0,0,24,24,24
|
||||
db 248,248,24,24,24,0,0,0,248,248,24,24,24,3,7,14,28,56
|
||||
db 112,224,192,192,224,112,56,28,14,7,3,1,3,7,15,31,63,127
|
||||
db 255,0,0,0,0,15,15,15,15,128,192,224,240,248,252,254,255,15
|
||||
db 15,15,15,0,0,0,0,240,240,240,240,0,0,0,0,255,255,0
|
||||
db 0,0,0,0,0,0,0,0,0,0,0,255,255,0,0,0,0,240
|
||||
db 240,240,240,0,28,28,119,119,8,28,0,0,0,0,31,31,24,24
|
||||
db 24,0,0,0,255,255,0,0,0,24,24,24,255,255,24,24,24,0
|
||||
db 0,60,126,126,126,60,0,0,0,0,0,255,255,255,255,192,192,192
|
||||
db 192,192,192,192,192,0,0,0,255,255,24,24,24,24,24,24,255,255
|
||||
db 0,0,0,240,240,240,240,240,240,240,240,24,24,24,31,31,0,0
|
||||
db 0,120,96,120,96,126,24,30,0,0,24,60,126,24,24,24,0,0
|
||||
db 24,24,24,126,60,24,0,0,24,48,126,48,24,0,0,0,24,12
|
||||
db 126,12,24,0,0,0,0,0,0,0,0,0,0,0,24,24,24,24
|
||||
db 0,24,0,0,102,102,102,0,0,0,0,0,102,255,102,102,255,102
|
||||
db 0,24,62,96,60,6,124,24,0,0,102,108,24,48,102,70,0,28
|
||||
db 54,28,56,111,102,59,0,0,24,24,24,0,0,0,0,0,14,28
|
||||
db 24,24,28,14,0,0,112,56,24,24,56,112,0,0,102,60,255,60
|
||||
db 102,0,0,0,24,24,126,24,24,0,0,0,0,0,0,0,24,24
|
||||
db 48,0,0,0,126,0,0,0,0,0,0,0,0,0,24,24,0,0
|
||||
db 6,12,24,48,96,64,0,0,60,102,110,118,102,60,0,0,24,56
|
||||
db 24,24,24,126,0,0,60,102,12,24,48,126,0,0,126,12,24,12
|
||||
db 102,60,0,0,12,28,60,108,126,12,0,0,126,96,124,6,102,60
|
||||
db 0,0,60,96,124,102,102,60,0,0,126,6,12,24,48,48,0,0
|
||||
db 60,102,60,102,102,60,0,0,60,102,62,6,12,56,0,0,0,24
|
||||
db 24,0,24,24,0,0,0,24,24,0,24,24,48,6,12,24,48,24
|
||||
db 12,6,0,0,0,126,0,0,126,0,0,96,48,24,12,24,48,96
|
||||
db 0,0,60,102,12,24,0,24,0,0,60,102,110,110,96,62,0,0
|
||||
db 24,60,102,102,126,102,0,0,124,102,124,102,102,124,0,0,60,102
|
||||
db 96,96,102,60,0,0,120,108,102,102,108,120,0,0,126,96,124,96
|
||||
db 96,126,0,0,126,96,124,96,96,96,0,0,62,96,96,110,102,62
|
||||
db 0,0,102,102,126,102,102,102,0,0,126,24,24,24,24,126,0,0
|
||||
db 6,6,6,6,102,60,0,0,102,108,120,120,108,102,0,0,96,96
|
||||
db 96,96,96,126,0,0,99,119,127,107,99,99,0,0,102,118,126,126
|
||||
db 110,102,0,0,60,102,102,102,102,60,0,0,124,102,102,124,96,96
|
||||
db 0,0,60,102,102,102,108,54,0,0,124,102,102,124,108,102,0,0
|
||||
db 60,96,60,6,6,60,0,0,126,24,24,24,24,24,0,0,102,102
|
||||
db 102,102,102,126,0,0,102,102,102,102,60,24,0,0,99,99,107,127
|
||||
db 119,99,0,0,102,102,60,60,102,102,0,0,102,102,60,24,24,24
|
||||
db 0,0,126,12,24,48,96,126,0,0,30,24,24,24,24,30,0,0
|
||||
db 64,96,48,24,12,6,0,0,120,24,24,24,24,120,0,0,8,28
|
||||
db 54,99,0,0,0,0,0,0,0,0,0,255,0,0,24,60,126,126
|
||||
db 60,24,0,0,0,60,6,62,102,62,0,0,96,96,124,102,102,124
|
||||
db 0,0,0,60,96,96,96,60,0,0,6,6,62,102,102,62,0,0
|
||||
db 0,60,102,126,96,60,0,0,14,24,62,24,24,24,0,0,0,62
|
||||
db 102,102,62,6,124,0,96,96,124,102,102,102,0,0,24,0,56,24
|
||||
db 24,60,0,0,6,0,6,6,6,6,60,0,96,96,108,120,108,102
|
||||
db 0,0,56,24,24,24,24,60,0,0,0,102,127,127,107,99,0,0
|
||||
db 0,124,102,102,102,102,0,0,0,60,102,102,102,60,0,0,0,124
|
||||
db 102,102,124,96,96,0,0,62,102,102,62,6,6,0,0,124,102,96
|
||||
db 96,96,0,0,0,62,96,60,6,124,0,0,24,126,24,24,24,14
|
||||
db 0,0,0,102,102,102,102,62,0,0,0,102,102,102,60,24,0,0
|
||||
db 0,99,107,127,62,54,0,0,0,102,60,24,60,102,0,0,0,102
|
||||
db 102,102,62,12,120,0,0,126,12,24,48,126,0,0,24,60,126,126
|
||||
db 24,60,0,24,24,24,24,24,24,24,24,0,126,120,124,110,102,6
|
||||
db 0,8,24,56,120,56,24,8,0,16,24,28,30,28,24,16,0
|
||||
fname:
|
||||
ifont db 1024 dup(?)
|
||||
|
||||
dfont db 4096 dup(?)
|
||||
|
||||
ENDS
|
||||
END start
|
Loading…
x
Reference in New Issue
Block a user