About

APSoft was an idea for a software company comprised of Anduin, Perry, and Stu. Once upon a time we endeavored to create an operating system called MaxOS. Beyond a few graphics demos and simple programs, APSoft never released much. APSoft has been home to Perry’s website and email since 1995, welcome to APSoft.com version 2.0!

A little text demo we created that hyped MaxOS

Below is the code that created the demo you see above. This is a fantastic tool: http://codelobe.com/tools/cp437-converter

.MODEL SMALL
.STACK 200h
.DATA?
        Screen  db      6000 dup(?)
        Color   db      ?
.DATA
        INPUT_STATUS_0 equ   03dah   ;Input status 0 register
        EnigmaMsg       
	db      1,1fh
	db      "     ┌─────┐    ┌──────┐  ┌──────       "
	db      "     │     │    │      │  │             "
	db      "     ├─────┤    ├──────┘  └──────┐      "
	db      "     │     │    │                │      "
	db      "     │     │    │                │      "
	db      "                │                │      "
	db      "     ┌───────────────────────────┘      "
	db      "     │                                  ",1,13h
	db      "        (Good Quality Software)         "
	db      "                                        ",1,1eh
	db      "  ═══════════════╤═══════════════════   "
	db      "    ┌─┐┌─┐ ┌───┐ │┌─  ┌─── ┌──┐ ┌──     "
	db      "    │ └┘ │ ├───┤ ├┴─┐ ├──  ├─┬┘ └──┐    "
	db      "    │    │ │   │ │  │ └─── │ └     │    "
	db      "   ═╧════╧═╧═══╧═╧══╧══════╧═══════╛    ",1,1bh
	db      "                 ╔══╗ ╔═══              "
	db      "                 ║  ║ ╠══               "
	db      "                 ║  ║ ║                 "
	db      "                 ╚══╝                   ",1,10h
	db      "       ",1,19h,"┌═┬═┐ ",1,1dh,"┌──┐ ",1,1ch,"═╕ ╒═  ",1,1eh,"╓──╖ ",1,1ah,"╔═══      "
	db      "       ",1,19h,"│∙│∙│ ",1,1dh,"├──┤  ",1,1ch,"╘╤╛   ",1,1eh,"║  ║ ",1,1ah,"╚═══╗     "
	db      "       ",1,19h,"│ ╧ │ ",1,1dh,"│  │  ",1,1ch,"╒╧╕   ",1,1eh,"║  ║ ",1,1ah,"    ║     "
	db      "       ",1,19h,"┴   ┴ ",1,1dh,"│  │ ",1,1ch,"═╛ ╘═  ",1,1eh,"╙──╜ ",1,1ah,"════╝     "
	db      1,00h,"     ",1,0fh,"Coders ",1,04h,"of ",1,0ch,"APS ",1,07h
	db      "are ",1,0fh,"--- ",1,0fh,"Sl",1,0bh,"ac",1,09h,"ke",1,01h,"r      ",1,0bh
	db      "    -- ",1,0fh,"Pe",1,0bh,"rr",1,09h,"y ",1,01h,"H. ",1,09h
	db      "------- ",1,0fh,"Ac",1,0bh,"id ",1,09h,"St",1,01h,"u ",1,01h," --    "

LOCALS
.CODE
WaitVsyncStart   macro
	LOCAL WaitNotVsync,WaitVsync
	mov     dx,INPUT_STATUS_0
WaitNotVsync:
	in      al,dx
	test    al,08h
	jnz     WaitNotVsync
WaitVsync:
	in      al,dx
	test    al,08h
	jz      WaitVsync
	endm

Enigma  PROC
        mov     ax,@data
        mov     ds,ax

        call    Remove_Cursor
        call    Copy_Stuff
        mov     bx,40
@@SCROLL_IN:
        WaitVsyncStart
        call    Display_Stuff
        dec     bx
        cmp     bx,-1
        jne     @@SCROLL_IN
        call    Get_Key
        mov     bx,0
@@SCROLL_OUT:
        WaitVsyncStart
        call    Display_Stuff
        inc     bx
        cmp     bx,41
        jne     @@SCROLL_OUT
        call    Restore_Cursor
        mov     ax,4c00h
        int     21h
Enigma  ENDP

Get_Key PROC
        push    ax
        xor     ax,ax
        int     16h
        pop     ax
        ret
Get_Key ENDP

Remove_Cursor   PROC
        push    ax cx
        mov     ah,01h
        mov     cx,0200h
        int     10h
        pop     cx ax
        ret
Remove_Cursor   ENDP

Restore_Cursor  PROC
        push    ax cx
        mov     ah,01h
        mov     cx,0607h
        int     10h
        pop     cx ax
        ret
Restore_Cursor  ENDP

Display_Stuff   PROC
        push    ax bx cx di si es
        mov     ax,0b800h
        mov     es,ax
        xor     di,di
        shl     bx,1
        mov     si,offset Screen
        add     si,bx
        xor     bx,bx
        xor     cx,cx
@@COPY_SCREEN:
        mov     ax,ds:[si+bx]
        mov     es:[di+bx],ax

        add     bx,2
        cmp     bx,160
        jne     @@COPY_SCREEN
        add     si,240
        add     di,160
        xor     bx,bx
        inc     cx
        cmp     cx,25
        jne     @@COPY_SCREEN
        pop     es si di cx bx ax
        ret
Display_Stuff   ENDP

Copy_Stuff      PROC
        push    ax bx cx di si es

        mov     si,offset Enigma
        mov     ax,seg Screen
        mov     es,ax
        mov     di,offset Screen

        mov     Color,07h
        xor     bx,bx
        xor     cx,cx
@@LOGO_LOOP:
        lodsb
        cmp     al,1
        jne     @@SAME_COLOR
        lodsb
        mov     Color,al
        jmp     @@LOGO_LOOP
@@SAME_COLOR:
        mov     ah,Color
        mov     es:[di+bx],ax
        add     bx,2
        cmp     bx,80
        jne     @@LOGO_LOOP
        add     di,240
        xor     bx,bx
        inc     cx
        cmp     cx,25
        jne     @@LOGO_LOOP

;Put the Screen in the array
        mov     di,offset Screen
        add     di,80
        mov     ax,0b800h
        mov     es,ax
        xor     si,si
        xor     bx,bx
        xor     cx,cx
@@SCREEN_LOOP:
        mov     ax,es:[si+bx]
        mov     ds:[di+bx],ax
        add     bx,2
        cmp     bx,160
        jne     @@SCREEN_LOOP
        add     di,240
        add     si,160
        xor     bx,bx
        inc     cx
        cmp     cx,25
        jne     @@SCREEN_LOOP
        pop     es si di cx bx ax
        ret
Copy_Stuff      ENDP

        end Enigma