| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- .286
- .model small
- .code
- org 100h
- ;--------------------
- Black equ 0
- Blue equ 1
- Green equ 2
- Cyan equ 3
- Red equ 4
- Magenta equ 5
- Brown equ 6
- LightGray equ 7
- DarkGray equ 8
- LightBlue equ 9
- LightGreen equ 10
- LightCyan equ 11
- LightRed equ 12
- LightMagenta equ 13
- Yellow equ 14
- White equ 15
- ; Color Defenition
- FileColor equ 128
- FileBg equ 22
- ;--------------------
- start:
- mov ax, 1130h
- mov bh, 06h
- int 10h
- mov FontSeg, es
- mov FontOffs, bp
- mov ax, 13h
- int 10h
- mov ax, 3d00h
- mov dx, offset fname
- int 21h
- jc MainEnd
- mov bx, ax
- mov ah, 3fh
- mov cx, 1f8h
- mov dx, offset buf
- int 21h
- cmp ax, 0
- je FileEnd
- mov cx, ax
- mov di, dx
- ReadChar:
- mov ah, 0
- mov al, byte ptr [di]
- cmp al, 0dh
- jne writenorm
- inc di
- cmp byte ptr [di], 0ah
- jne NewLine
- inc di
- dec cx
- jmp NewLine
- writenorm:
- push charx
- push chary
- push ax
- push filecolor
- push filebg
- push fontoffs
- push fontseg
- Call OutCharXY
- inc di
- cmp charX, 39
- jne VeryGood
- cmp byte ptr [di], 0Dh
- loope ReadChar
- jmp FileEnd
- VeryGood:
- inc charX
- loop ReadChar
- jmp FileEnd
- NewLine:
- cmp charY, 11
- je FileEnd
- inc charY
- mov charX, 0
- loop ReadChar
- FileEnd:
- mov ah,3eh
- int 21h
- MainEnd:
- mov ah, 8h ; ReadKey
- int 21h ;
- mov ax, 3h ;
- int 10h ; Set Text mode
- int 20h ; Quit
- ;---------------------------------------------
- OutCharXY proc near ;OutCharXY(X,Y,Char,Color,bg,TableOffs,TableSeg)
- push bp
- mov bp, sp
- TableSeg equ word ptr [bp+4]
- TableOffs equ word ptr [bp+6]
- Color equ byte ptr [bp+10]
- Bg equ byte ptr [bp+8]
- Char equ byte ptr [bp+12]
- posY equ word ptr [bp+14]
- posX equ word ptr [bp+16]
- pusha
- push es
- ;----------------------------
- ; Character Creation
- mov di, TableOffs
- mov es, TableSeg
- mov ah, 0
- mov al, Char
- shl ax, 4
- add di, ax
- mov cx, 16
- mov si, offset face
- MainLoop:
- mov bh, es:di
- push cx
- mov cx, 8
- LineLoop:
- test bh, 80h
- jz BackGround
- mov ah, Color
- mov byte ptr ds:[si], ah
- jmp LoopEnd
- BackGround:
- mov ah, Bg
- mov byte ptr ds:[si], ah
- LoopEnd:
- shl bh, 1
- inc si
- loop LineLoop
- pop cx
- inc di
- loop MainLoop
- ; End of Character creation
- ;=======================================
- mov ax, posX
- shl ax, 3
- push ax ; X position
- mov ax, posY
- shl ax, 4
- push ax ; Y position
- push offset face ; Character bitmap
- push 8 ; SizeX
- push 16 ; SizeY
- call WriteSprite ; WriteChar
- pop es
- popa
- pop bp
- ret 14
- endp
- ;-------------------------------------------
- WriteSprite proc near ;writesprite(x,y,char *sprt,razmx,razmy)
- push bp
- mov bp,sp
- razmy equ word ptr [bp+4]
- razmx equ word ptr [bp+6]
- sprt equ word ptr [bp+8]
- posy equ word ptr [bp+10]
- posx equ word ptr [bp+12]
- pusha
- push es
- mov ax, 0A000h
- mov es, ax
- mov ax, posy
- mov bx, ax
- shl ax, 8
- shl bx, 6
- add ax, bx
- add ax, posx
- mov di, ax
- mov ax, sprt
- mov si, ax
- mov cx, razmy
- lup:
- push cx
- mov cx, razmx
- repe movsb
- add di, 320
- sub di,razmx
- pop cx
- loop lup
- pop es
- popa
- pop bp
- ret 10
- endp
- face db 128 dup (?)
- FontOffs dw ?
- FontSeg dw ?
- fname db 'colors.txt'
- charx dw 0
- chary dw 0
- buf db 1f8h dup (?)
- end start
|