diff --git a/16bit.Scratch b/16bit.Scratch index da660c5..ef4cf63 100644 Binary files a/16bit.Scratch and b/16bit.Scratch differ diff --git a/16bit.Scratch.s b/16bit.Scratch.s index 80a1944..9bd2c4f 100644 --- a/16bit.Scratch.s +++ b/16bit.Scratch.s @@ -21,6 +21,8 @@ ;============================================================================================================= start: Video_SetTextMode_80x25 +; Video_SetGraphicsMode_320x200 +; Video_SetGraphicsMode_640x200 ; Exclusive-OR (xor'ing a value to itself zeros the value) xor AX, AX @@ -42,11 +44,11 @@ int SystemService ; Hex Testing String_Out HexTest, [HexTest_len] -Hex16_ToString [HexNum], HexString -Hex16_ToString [HexNumT], HexStringT +Hex16_ToString [HexNumA], HexStringA +Hex16_ToString [HexNumB], HexStringB String_Out ResultStr, [ResultStr_len] -String_Out HexString, 4 -String_Out HexStringT, 4 +String_Out HexStringA, 4 +String_Out HexStringB, 4 mov AH, BIOS_Wait mov CX, 0x10 @@ -55,84 +57,13 @@ int SystemService Char_Out char_LF Char_Out char_CR - mov BX, 0x7C00 - ; sub BX, 0x7DFF - ; mov BX, 0x0000 - mov DX, 512 -call dump_out +DumpOut 0x7C00, 512 ; Idle hang : jmp short hang -dump_out: -; Args: -; BX = StartLocation -; CX = ByteCount -%define StartLocation BX -%define ByteCount DX - push BX - push SI - ; xor BX, BX - xor SI, SI - -.loop: - cmp SI, ByteCount - je .break - - - push BX - push DX - push SI - mov AX, StartLocation - add AX, SI - -Hex16_ToString AX, .HexStr -String_Out .HexStr, 4 - - pop SI - pop DX - pop BX - - mov AH, [StartLocation + SI] - add SI, 1 - - mov AL, [StartLocation + SI] - mov [.HexNum], AX - - push BX - push DX - push SI -Char_Out ' ' - -Hex16_ToString [.HexNum], .HexStr -String_Out .HexStr, 4 - pop SI - pop DX - pop BX - -Char_Out ' ' - - mov AH, BIOS_Wait - mov CX, 0x02 -int SystemService - - ; add SI, 4 - inc SI - jmp .loop - -.break: - pop SI - pop BX -ret - -.HexNum : dw 0x0000 -.HexStr : dw ' ' -%undef StartLocation -%undef WordCount - - %include "AAL.x86.routines.s" @@ -145,10 +76,10 @@ TestStr_len : dw 13 HexTest : db 'Hex Test', char_LF, char_CR HexTest_len : dw 10 -HexNum : dw 0x1994 -HexNumT : dw 0x2022 -HexString : db '0000' -HexStringT : db '0000' +HexNumA : dw 0x1994 +HexNumB : dw 0x2022 +HexStringA : db '0000' +HexStringB : db '0000' ResultStr : db 'Result: ' ResultStr_len : db 8 diff --git a/AAL.x86.routines.macros.s b/AAL.x86.routines.macros.s index ee43a66..84782dd 100644 --- a/AAL.x86.routines.macros.s +++ b/AAL.x86.routines.macros.s @@ -12,10 +12,28 @@ int VideoService %endmacro +%macro Video_SetGraphicsMode_320x200 0 + mov AH, Video_SetMode + mov AL, VideoMode_Graphics_320x200 +int VideoService +%endmacro + +%macro Video_SetGraphicsMode_640x200 0 + mov AH, Video_SetMode + mov AL, VideoMode_Graphics_640x200 +int VideoService +%endmacro + ;============================================================================================================= ; Routines ;============================================================================================================= +%macro DumpOut 2 + mov BX, %1 + mov DX, %2 +call out_Dump +%endmacro + %macro Hex16_ToString 2 mov DX, %1 mov CX, %2 @@ -25,10 +43,9 @@ call h16_toString %endmacro %macro Char_Out 1 - mov AX, %1 - push AX -call out_char - pop AX + mov AH, Video_TeleType + mov AL, %1 +int VideoService %endmacro %macro String_Out 2 diff --git a/AAL.x86.routines.s b/AAL.x86.routines.s index cffd735..596abad 100644 --- a/AAL.x86.routines.s +++ b/AAL.x86.routines.s @@ -7,6 +7,67 @@ ; Routines ;============================================================================================================= +out_Dump: +; Args: +; BX = StartLocation +; CX = ByteCount +%define StartLocation BX +%define ByteCount DX + push BX + push SI + xor SI, SI + +.loop: + cmp SI, ByteCount + je .break + + + push BX + push DX + push SI + mov AX, StartLocation + add AX, SI +Hex16_ToString AX, .HexStr +String_Out .HexStr, 4 + pop SI + pop DX + pop BX +Char_Out ' ' + +; Get next set of byte, organize to big endian. + mov AH, [StartLocation + SI] + add SI, 1 + mov AL, [StartLocation + SI] + mov [.HexNum], AX + + push BX + push DX + push SI +Hex16_ToString [.HexNum], .HexStr +String_Out .HexStr, 4 + pop SI + pop DX + pop BX +Char_Out ' ' + + mov AH, BIOS_Wait + mov CX, 0x02 +int SystemService + + inc SI + jmp .loop + +.break: + pop SI + pop BX +ret + +.HexNum : dw 0x0000 +.HexStr : dw ' ' +%undef StartLocation +%undef ByteCount + + ; Prints out a 16-bit hex value. h16_toString: ; Arg - DX : Hex Num @@ -59,23 +120,6 @@ h16_toString: ret -; Print out an ASCII character. -out_char: -%define arg1 BP + 6 - push BX - push BP - mov BP, SP - - mov AH, Video_TeleType - mov AL, [arg1] -int VideoService - - pop BP - pop BX -%undef arg1 -ret - - ; Print out an ascii string of speicifed length out_string: ; Arg - BX: String