Metropoli BBS
VIEWER: grafix.asm MODE: TEXT (ASCII)
include qlib.inc
include dos.inc
include string.inc
include video.inc     ;includes vesa.inc
include conio.inc
include stdio.inc
include stdlib.inc
include alloc.inc
include stdlib.inc
include ctype.inc

.data
cursor8a label byte
  db 16,16,16,16,16,16,16,16,00
  db 16,01,01,01,01,01,16,00,00
  db 16,01,01,01,01,16,00,00,00
  db 16,01,01,01,01,16,00,00,00
  db 16,01,01,01,01,01,16,00,00
  db 16,01,16,16,01,01,01,16,00
  db 16,16,00,00,16,01,01,01,16
  db 16,00,00,00,00,16,01,16,00
  db 00,00,00,00,00,00,16,00,00

cursor8b label byte
  db 01,01,01,01,01,01,01,01,00
  db 01,00,00,00,00,00,01,00,00
  db 01,00,00,00,00,01,00,00,00
  db 01,00,00,00,00,01,00,00,00
  db 01,00,00,00,00,00,01,00,00
  db 01,00,01,01,00,00,00,01,00
  db 01,01,00,00,01,00,00,00,01
  db 01,00,00,00,00,01,00,01,00
  db 00,00,00,00,00,00,01,00,00

;RGB       B    G    R
cursor16a db 2 dup (0f0h),2 dup (0f0h),2 dup (0f0h),2 dup (0f0h),2 dup (0f0h),2 dup (0f0h),2 dup (0f0h),2 dup (0f0h)
          db 2 dup (0f0h),2 dup (0f0h),2 dup (0f0h),2 dup (0f0h),2 dup (0f0h),2 dup (0f0h),2 dup (0f0h),2 dup (000h)
          db 2 dup (0f0h),2 dup (0f0h),2 dup (0f0h),2 dup (0f0h),2 dup (0f0h),2 dup (0f0h),2 dup (000h),2 dup (000h)
          db 2 dup (0f0h),2 dup (0f0h),2 dup (0f0h),2 dup (0f0h),2 dup (0f0h),2 dup (000h),2 dup (000h),2 dup (000h)
          db 2 dup (0f0h),2 dup (0f0h),2 dup (0f0h),2 dup (0f0h),2 dup (0f0h),2 dup (000h),2 dup (000h),2 dup (000h)
          db 2 dup (0f0h),2 dup (0f0h),2 dup (0f0h),2 dup (000h),2 dup (000h),2 dup (0f0h),2 dup (000h),2 dup (000h)
          db 2 dup (0f0h),2 dup (0f0h),2 dup (000h),2 dup (000h),2 dup (000h),2 dup (000h),2 dup (0f0h),2 dup (000h)
          db 2 dup (0f0h),2 dup (000h),2 dup (000h),2 dup (000h),2 dup (000h),2 dup (000h),2 dup (000h),2 dup (0f0h)

cursor16b db 2 dup (0a0h),2 dup (0a0h),2 dup (0a0h),2 dup (0a0h),2 dup (0a0h),2 dup (0a0h),2 dup (0a0h),2 dup (0a0h)
          db 2 dup (0a0h),2 dup (000h),2 dup (000h),2 dup (000h),2 dup (0a0h),2 dup (0a0h),2 dup (0a0h),2 dup (000h)
          db 2 dup (0a0h),2 dup (000h),2 dup (000h),2 dup (0a0h),2 dup (0a0h),2 dup (0a0h),2 dup (000h),2 dup (000h)
          db 2 dup (0a0h),2 dup (000h),2 dup (0a0h),2 dup (0a0h),2 dup (0a0h),2 dup (000h),2 dup (000h),2 dup (000h)
          db 2 dup (0a0h),2 dup (0a0h),2 dup (0a0h),2 dup (0a0h),2 dup (0a0h),2 dup (000h),2 dup (000h),2 dup (000h)
          db 2 dup (0a0h),2 dup (0a0h),2 dup (0a0h),2 dup (000h),2 dup (000h),2 dup (0a0h),2 dup (000h),2 dup (000h)
          db 2 dup (0a0h),2 dup (0a0h),2 dup (000h),2 dup (000h),2 dup (000h),2 dup (000h),2 dup (0a0h),2 dup (000h)
          db 2 dup (0a0h),2 dup (000h),2 dup (000h),2 dup (000h),2 dup (000h),2 dup (000h),2 dup (000h),2 dup (0a0h)

;RGB       B    G    R
cursor24a db 3 dup (0f0h),3 dup (0f0h),3 dup (0f0h),3 dup (0f0h),3 dup (0f0h),3 dup (0f0h),3 dup (0f0h),3 dup (0f0h)
          db 3 dup (0f0h),3 dup (0f0h),3 dup (0f0h),3 dup (0f0h),3 dup (0f0h),3 dup (0f0h),3 dup (0f0h),3 dup (000h)
          db 3 dup (0f0h),3 dup (0f0h),3 dup (0f0h),3 dup (0f0h),3 dup (0f0h),3 dup (0f0h),3 dup (000h),3 dup (000h)
          db 3 dup (0f0h),3 dup (0f0h),3 dup (0f0h),3 dup (0f0h),3 dup (0f0h),3 dup (000h),3 dup (000h),3 dup (000h)
          db 3 dup (0f0h),3 dup (0f0h),3 dup (0f0h),3 dup (0f0h),3 dup (0f0h),3 dup (000h),3 dup (000h),3 dup (000h)
          db 3 dup (0f0h),3 dup (0f0h),3 dup (0f0h),3 dup (000h),3 dup (000h),3 dup (0f0h),3 dup (000h),3 dup (000h)
          db 3 dup (0f0h),3 dup (0f0h),3 dup (000h),3 dup (000h),3 dup (000h),3 dup (000h),3 dup (0f0h),3 dup (000h)
          db 3 dup (0f0h),3 dup (000h),3 dup (000h),3 dup (000h),3 dup (000h),3 dup (000h),3 dup (000h),3 dup (0f0h)

cursor24b db 3 dup (0a0h),3 dup (0a0h),3 dup (0a0h),3 dup (0a0h),3 dup (0a0h),3 dup (0a0h),3 dup (0a0h),3 dup (0a0h)
          db 3 dup (0a0h),3 dup (000h),3 dup (000h),3 dup (000h),3 dup (0a0h),3 dup (0a0h),3 dup (0a0h),3 dup (000h)
          db 3 dup (0a0h),3 dup (000h),3 dup (000h),3 dup (0a0h),3 dup (0a0h),3 dup (0a0h),3 dup (000h),3 dup (000h)
          db 3 dup (0a0h),3 dup (000h),3 dup (0a0h),3 dup (0a0h),3 dup (0a0h),3 dup (000h),3 dup (000h),3 dup (000h)
          db 3 dup (0a0h),3 dup (0a0h),3 dup (0a0h),3 dup (0a0h),3 dup (0a0h),3 dup (000h),3 dup (000h),3 dup (000h)
          db 3 dup (0a0h),3 dup (0a0h),3 dup (0a0h),3 dup (000h),3 dup (000h),3 dup (0a0h),3 dup (000h),3 dup (000h)
          db 3 dup (0a0h),3 dup (0a0h),3 dup (000h),3 dup (000h),3 dup (000h),3 dup (000h),3 dup (0a0h),3 dup (000h)
          db 3 dup (0a0h),3 dup (000h),3 dup (000h),3 dup (000h),3 dup (000h),3 dup (000h),3 dup (000h),3 dup (0a0h)

cursor32a db 4 dup (0f0h),4 dup (0f0h),4 dup (0f0h),4 dup (0f0h),4 dup (0f0h),4 dup (0f0h),4 dup (0f0h),4 dup (0f0h)
          db 4 dup (0f0h),4 dup (0f0h),4 dup (0f0h),4 dup (0f0h),4 dup (0f0h),4 dup (0f0h),4 dup (0f0h),4 dup (000h)
          db 4 dup (0f0h),4 dup (0f0h),4 dup (0f0h),4 dup (0f0h),4 dup (0f0h),4 dup (0f0h),4 dup (000h),4 dup (000h)
          db 4 dup (0f0h),4 dup (0f0h),4 dup (0f0h),4 dup (0f0h),4 dup (0f0h),4 dup (000h),4 dup (000h),4 dup (000h)
          db 4 dup (0f0h),4 dup (0f0h),4 dup (0f0h),4 dup (0f0h),4 dup (0f0h),4 dup (000h),4 dup (000h),4 dup (000h)
          db 4 dup (0f0h),4 dup (0f0h),4 dup (0f0h),4 dup (000h),4 dup (000h),4 dup (0f0h),4 dup (000h),4 dup (000h)
          db 4 dup (0f0h),4 dup (0f0h),4 dup (000h),4 dup (000h),4 dup (000h),4 dup (000h),4 dup (0f0h),4 dup (000h)
          db 4 dup (0f0h),4 dup (000h),4 dup (000h),4 dup (000h),4 dup (000h),4 dup (000h),4 dup (000h),4 dup (0f0h)

cursor32b db 4 dup (0a0h),4 dup (0a0h),4 dup (0a0h),4 dup (0a0h),4 dup (0a0h),4 dup (0a0h),4 dup (0a0h),4 dup (0a0h)
          db 4 dup (0a0h),4 dup (000h),4 dup (000h),4 dup (000h),4 dup (0a0h),4 dup (0a0h),4 dup (0a0h),4 dup (000h)
          db 4 dup (0a0h),4 dup (000h),4 dup (000h),4 dup (0a0h),4 dup (0a0h),4 dup (0a0h),4 dup (000h),4 dup (000h)
          db 4 dup (0a0h),4 dup (000h),4 dup (0a0h),4 dup (0a0h),4 dup (0a0h),4 dup (000h),4 dup (000h),4 dup (000h)
          db 4 dup (0a0h),4 dup (0a0h),4 dup (0a0h),4 dup (0a0h),4 dup (0a0h),4 dup (000h),4 dup (000h),4 dup (000h)
          db 4 dup (0a0h),4 dup (0a0h),4 dup (0a0h),4 dup (000h),4 dup (000h),4 dup (0a0h),4 dup (000h),4 dup (000h)
          db 4 dup (0a0h),4 dup (0a0h),4 dup (000h),4 dup (000h),4 dup (000h),4 dup (000h),4 dup (0a0h),4 dup (000h)
          db 4 dup (0a0h),4 dup (000h),4 dup (000h),4 dup (000h),4 dup (000h),4 dup (000h),4 dup (000h),4 dup (0a0h)

ccol db 0   ;current color(for color rotation)

.data?
tmpstr db 80 dup (?)
a db ?
temp db 10 dup (?)
linearaddr dd ?
tvid dd ?
mode db ?
x dd ?
y dd ?
bpp db ?

;for VESAinfo()
vesa_ver dw ?
modeidx dd ?

.data
font8 equ "8bit.fnt"
font16 equ "16bit.fnt"
font24 equ "24bit.fnt"
font32 equ "32bit.fnt"
fontbuf dd 0

.code
wait4key proc
  .repeat
    call kbhit
  .until al
  call getch
  ret
wait4key endp

include grafix-t.asm    ;Text Tests
include grafix-g.asm    ;Grafix Tests

.code
main proc
  include gfxinit.asm
  call mouse_init
  .if eax==ERROR
    callp printf,"Mouse Driver not installed !\n"
    callp exit,0
  .endif
top:
  callp t_setmode,80,25           ;set standard 80x25 mode
  callp printf,"Grafix Test DEMO  v1.23\n\n"
  callp printf,"  Select an option:\n\n"
  callp printf,"    T) Text Mode Tests\n"
  callp printf,"    G) Grafix Mode Tests\n\n"
  callp printf,"    V) Display VESA specific info\n\n"
  callp printf,"    Q) Quit\n:>";
@@:
  call getch
  callp toupper,al
  .if (al=='Q')
    callp t_setmode,80,25
    callp printf,"Goodbye..."
    ret
  .endif
  .if al=='T'
    call text_test
  .elseif al=='G'
    call grafix_test
  .elseif al=='V'
    call do_vesa_info
  .else
    jmp @b
  .endif
  jmp top
main endp

vesa_show proc
  call clrscr
  callp printf,"X=%d Y=%d BPP=%d\n",vesa_modeinfo.XResolution,vesa_modeinfo.YResolution,vesa_modeinfo.BitsPerPixel
  callp printf,"CelX=%d CelY=%d\n",vesa_modeinfo.XCharSize,vesa_modeinfo.YCharSize
  callp printf,"BankSize=%d  WinSize=%d\n",vesa_modeinfo.BankSize,vesa_modeinfo.WinSize
  callp printf,"BPSL=%d\n",vesa_modeinfo.BytesPerScanLine
  xor eax,eax
  mov ax,vesa_modeinfo.ModeAttributes
  callp printf,"ModeAttributes=%016b (%X)\n",eax,eax
  xor eax,eax
  mov al,vesa_modeinfo.WinAAttributes
  callp printf,"WinAAttributes=%08b (%X)\n",eax,eax
  xor eax,eax
  mov al,vesa_modeinfo.WinBAttributes
  callp printf,"WinBAttributes=%08b (%X)\n",eax,eax
  callp printf,"WinGranularity=%d WinA=%X WinB=%X\n",vesa_modeinfo.WinGranularity,vesa_modeinfo.WinASegment,vesa_modeinfo.WinBSegment
  callp printf,"PhysBasePtr=%X\n\n",vesa_modeinfo.PhysBasePtr
  callp printf,"Press space to continue or ESC to quit..."
  ret
vesa_show endp

do_vesa_info proc
  call clrscr

  callp vesa_init
  .if eax==ERROR
    callp printf,"\nVESA not detected (press a key)"
    call wait4key
    ret
  .endif
  mov vesa_ver,ax
  callp printf," Vesa Info\n\n"
  callp printf,"VESA v%d.%d\n",bptr[vesa_ver+1],bptr[vesa_ver]
  xor eax,eax
  xor ebx,ebx
  mov ax,wptr [ vesa_info.OemStringPtr + 2 ]
  mov bx,wptr vesa_info.OemStringPtr
  shl eax,4
  add eax,ebx
  callp printf,"OEM :%s\n\n",eax
  callp printf,"Press a key to view VESA mode list..."
  call wait4key

  call vesa_firstmode
  .if eax==ERROR
bad:
    call clrscr
    callp printf,"No more VESA modes available! (press a key)"
    call wait4key
    ret
  .endif  
top:
  call vesa_show
@@:
  call getch
  cmp al,32
  jz do_more
  cmp al,27
  jnz @b
  ret
do_more:
  call vesa_nextmode
  .if EAX==ERROR
    jmp bad
  .endif
  jmp top
do_vesa_info endp

end

[ RETURN TO DIRECTORY ]