Postit Assembly Loader

 BBS: Inland Empire Archive
Date: 09-16-82 (07:13)             Number: 301
From: RICH GELDREICH               Refer#: NONE
  To: ALL                           Recvd: NO  
Subj: Postit Assembly Loader         Conf: (2) Quik_Bas
        To fullfill part of  the  requirements  of  the rules I have
just proposed about DEBUG decoders,  here is the assembly code to the
DEBUG decoder used in the assembly version of PostIt!.   This is the
exact  same  code  which  is entered into your computer and executed
whenever a PostIt!   DEBUG script is extracted:

;PostIt! Assembly version 1.0 - DEBUG loader
;By Rich Geldreich 1992
;Assembled with TASM v2.0
;(tasm /l loader)


Padd    db 0100h dup (0)                ;ORG would work too

        Mov     ax, 03C00h              ;Open new file function
        Mov     dx, offset FN           ;Get filename
        Xor     cx, cx                  ;
        Int     021h                    ;Open it
        Jc      @@Error                 ;Exit if error(beeps and tells user
                                     ;"Bad Script"- which really isn't true
                                        ;when a disk error occurs

        Mov     si, 0200h               ;Start of encoded data
        Push    ax                      ;Push handle
        Mov     bp, 09999h         ;--PostIt! will insert file's length here
        Push    bp                      ;Push file's length
        Mov     di, 37000            ;Hopefully 37000+24500<than the stack!
        Push    di                      ;Push start of decoded file
        Xor     bx, bx
        Mov     cl, -6

@@05:   Mov     dh, al                  ;Got 6 more bits
        Add     cl, 6

@@10:   Xor     ah, ah                  ;Start of main extraction loop

@@15:   Lodsb                           ;Get a character

        Cmp     al, 57                  ;Translate the char to 0-63
        Jna     @@B

        Cmp     al, 90
        Jna     @@A

        Sub     al, 6                   ;variable entry sub table
        Sub     al, 7
        Sub     al, 46

        Jcxz    @@05                    ;Need more bits?

        Shl     ax, cl                  ;Shift past what we already got
        Or      al, dh                  ;OR it with what we already got
        Stosb                           ;Store 8 bits
        Add     bl, al                  ;Update checksum
        Xchg    ax, dx                  ;Save for later
        Dec     cx                      ;2 less bits now
        Dec     cx

        Dec     bp                      ;1 less byte now
        Jnz     @@10                    ;Jump if more

        Cmp     bl, 17  ;--PostIt! will insert the file's checksum here
        Jne     @@Error                 ;Too bad the file's bad

        Pop     dx cx bx                ;Pop offset, # chars, handle
        Mov     ah, 040h                ;Write it out to disk
        Int     021h
        Jnc     @@Exit                  ;If no error then just return
        Mov     ah, 9                   ;Show error string(beeps too!)
        Mov     dx, offset SE           ;Get offset
        Int     021h
        Int     020h                    ;Exit program(DEBUG will close the
                                        ;open file when it exits)
SE      db      7,'Bad Script!$'        ;Error string
FN      db      'WXYZABCD.123',0 ;--PostIt! will insert the correct
                                 ;filename here

 * SLMR 2.0 * uiouiouoiukjk;jkn,m.nm.m,n,mnjkhkjhlkjjj keyboard art

--- RBBSMAIL 17.2A
 * Origin: Computer Co-Op RBBS HST, 609-784-9404 Voorhees
NJ (RBBS-PC 1:266/29)
Outer Court
Echo Basic Postings

Books at Amazon:

Back to BASIC: The History, Corruption, and Future of the Language

Hackers: Heroes of the Computer Revolution (including Tiny BASIC)

Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution

The Advent of the Algorithm: The Idea that Rules the World

Moths in the Machine: The Power and Perils of Programming

Mastering Visual Basic .NET