home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / files / program / achlib / achapp.s < prev    next >
Text File  |  1988-03-22  |  14KB  |  373 lines

  1. ;*** achstart.s
  2. ;
  3. ;    871121
  4.  
  5.  
  6. ;*** Stack & Heap Sizes
  7. ;    The stack sits below the heap and has STACK long words 
  8. ;    allocated. The heap size (memory kept after a shrink)
  9. ;    is set by EXTRA. _brk monitors heap space r=  ests.
  10.  
  11. STACK     =         $200
  12. EXTRA     =         $2500
  13.  
  14.  
  15. ;*** Basepage Structure
  16.  
  17. LOTPA     =         $00       ; Low TPA address
  18. HITPA     =         $04       ; High TPA address
  19. CODEBASE  =         $08       ; Code segment start
  20. CODELEN   =         $0c       ; Code segment length
  21. DATABASE  =         $10       ; Data segment start
  22. DATALEN   =         $14       ; Data segment length
  23. BSSBASE   =         $18       ; Bss  segment start
  24. BSSLEN    =         $1c       ; Bss  segment length
  25. DTA       =         $20       ; Disk Transfer Address
  26. PARENT    =         $24       ; parent's basepage
  27. RESERVE1  =         $28       ; resevered
  28. ENVIRON   =         $2c       ; environment string
  29. FCB2      =         $38       ; 2nd parsed fcb
  30. FCB1      =         $5c       ; 1st parsed fcb
  31. COMMAND   =         $80       ; Command tail
  32.  
  33.  
  34.  
  35.           .globl    _FUBAR
  36.  
  37. ;*** Start here
  38.  
  39.           .text
  40.           .globl    __main
  41.           .globl    __exit
  42.           .globl    __sovf
  43.           .even
  44. _FUBAR:
  45.           move.l    4(sp),a5
  46.           move.l    a5,__base
  47.           move.l    #U_STACK,sp 
  48.  
  49.           move.l    CODELEN(a5),d0
  50.           add.l     DATALEN(a5),d0
  51.           add.l     BSSLEN(a5),d0
  52.           add.l     #EXTRA,d0
  53.  
  54.           move.l    d0,-(sp)
  55.           move.l    a5,-(sp)
  56.           clr.w     -(sp)
  57.           move      #$4a,-(sp)          ; do Mshrink
  58.           trap      #1
  59.           add.l     #12,sp
  60.  
  61.           move.l    __base,a0           ; Load C external
  62.           move.l    BSSBASE(a0),a1      ; a1 -> .bss region
  63.           adda.l    BSSLEN(a0),a1       ; a1 -> 1st heap loc
  64.           move.l    a1,__break          ; Put in "break" loc
  65.  
  66.           lea.l     COMMAND(a0),a2      ; a2 -> command line
  67.           move.b    (a2)+,d0            ; d0 = byte count
  68.           andi.l    #$ff,d0             ; clear junk
  69.           move.w    d0,-(a7)            ; push length
  70.           move.l    a2,-(a7)            ; Push commnd
  71.           clr.l     a6                  ; Clear frame pointer
  72.           jsr       __main
  73.           jmp       __exit
  74.  
  75.  
  76.  
  77.           .globl    _brk
  78.  
  79. ;*** brk
  80.  
  81.           .text
  82. _brk:           
  83.           move.l   4(sp),a0             ; new break r=  est
  84.           move.l    #-1,d0
  85.           move.l   __base,a1            ; basepage address
  86.           move.l   HITPA(a1),a1         ; get MAX break
  87.           cmpa.l    a0,a1               ; return -1 if 
  88.           ble.s     BRKX                ;  r=  est >= TOP
  89.           move.l    a0,__break
  90.           clr.l     d0
  91. BRKX:
  92.           rts         
  93.  
  94.  
  95. __sovf:
  96.           move.w    #9,d0               ; String print
  97.           lea       ovf,a0              ; a0-> message
  98.           move.l    a0,d1               ; load proper reg
  99.           trap      #2                  ; Issue message
  100. __exit:
  101.           move.w    #0,d0               ; Exit
  102.           trap      #2
  103.  
  104.  
  105.  
  106.           .globl    _blkfill
  107.  
  108. ;*** Block Fill function:
  109. ;
  110. ;    blkfill (dest, char, count);
  111. ;
  112. ; e  BYTE    *dest 
  113. ;    BYTE    char to fill
  114. ;    WORD    count
  115. ;
  116.           .text
  117. _blkfill:
  118.           move.l    4(a7),a0       ; -> Output area
  119.           move.w    8(a7),d1       ; =  output char
  120.           move.w    10(a7),d0      ; =  output count
  121.           ext.l     d0             ; make it long
  122.           subq.l    #1,d0          ; decrement
  123.           ble.s     filldone       ; Done if le
  124. fillit:   move.b    d1,(a0)+       ; move a byte
  125.           dbra      d0,fillit      ; Continue
  126. filldone: clr.l     d0             ; always return 0
  127.           rts 
  128.  
  129.  
  130.  
  131.           .globl    _index
  132.           .globl    _strchr
  133.  
  134. ;*** Index function to find out if a particular
  135. ;    character is in a string.
  136. ;
  137. ; e  long pointer to string
  138. ;    short character to find
  139. ;
  140. ; x  D0.L = pointer to character else NULL if failed
  141.  
  142.           .text
  143. _index:
  144. _strchr:
  145.           move.l    4(a7),a0       ; a0 -> String
  146.           move.w    8(a7),d0       ; D0 = desired character
  147. xindex: 
  148.           tst.b     (a0)           ; EOS?
  149.           bne.s     notend         ; No, continue to look
  150.           clr.l     d0             ; Not found
  151.           rts 
  152. notend: 
  153.           cmp.b     (a0)+,d0       ; check for character
  154.           bne.s     xindex
  155.           move.l    a0,d0          ; Found it
  156.           subq.l    #1,d0          ; set return pointer
  157.           rts
  158.  
  159.  
  160.  
  161.           .globl    ___pname 
  162.           .globl    ___tname
  163.           .globl    ___lname
  164.           .globl    ___xeof 
  165.  
  166. ;*** Runtime Data
  167.  
  168.           .data
  169.           .even
  170. ovf:      .dc.b     'Stack Overflow$'   ; Error message
  171. ___pname: .dc.b     'C runtime',0       ; Program name
  172. ___tname: .dc.b     'CON:',0            ; Console name
  173. ___lname: .dc.b     'LST:',0            ; List device name
  174. ___xeof:  .dc.b     $1a                 ; Control-Z
  175.  
  176.  
  177.  
  178.           .globl    __base
  179.           .globl    __break
  180.           .globl    ___cpmrv
  181.  
  182. ;*** BSS Data
  183.  
  184.           .bss
  185.           .even
  186. __base:   .ds.l     1              ; Base Page
  187. __break:  .ds.l     1              ; Break function
  188. ___cpmrv: .ds.w     1              ; Last CP/M return val
  189.  
  190.           .ds.l     STACK
  191. U_STACK:  .ds.l     1
  192.  
  193.  
  194.  
  195.           .globl    _crystal
  196.           
  197. ;*** AES Call
  198. ;
  199. ; e  long pointer to AES parameter block
  200.  
  201.           .text
  202. _crystal:
  203.           move.l    4(sp),d1
  204.           move.w    #200,d0
  205.           trap      #2
  206.           rts
  207.  
  208.  
  209.  
  210.           .globl    _control
  211.  
  212. ;*** AES Arrays
  213. ;
  214. ;    short control [] =
  215. ;         {
  216. ;              op code,
  217. ;              size in words of _int_in,
  218. ;              size in words of _int_out,
  219. ;              size in longs of _addr_in,
  220. ;              size in longs of _addr_out,
  221. ;         }
  222.  
  223.           .bss
  224.           .even
  225. _control: .ds.w     4
  226.  
  227.  
  228.  
  229.           .globl    _ctrl_cnts
  230.  
  231. ;*** Control Array Settings
  232. ;
  233. ;
  234. ;    This .data is used to set entrys 1, 2 and 3 in the control
  235. ;    array.
  236.  
  237.         .data
  238.         .even
  239. _ctrl_cnts:
  240.  
  241. ;    Application Manager
  242.         .dc.b   0, 1, 0                 ; func 010              
  243.         .dc.b   2, 1, 1                 ; func 011              
  244.         .dc.b   2, 1, 1                 ; func 012              
  245.         .dc.b   0, 1, 1                 ; func 013              
  246.         .dc.b   2, 1, 1                 ; func 014              
  247.         .dc.b   1, 1, 1                 ; func 015              
  248.         .dc.b   0, 0, 0                 ; func 016              
  249.         .dc.b   0, 0, 0                 ; func 017              
  250.         .dc.b   0, 0, 0                 ; func 008              
  251.         .dc.b   0, 1, 0                 ; func 019              
  252. ;    Event Manager
  253.         .dc.b   0, 1, 0                 ; func 020              
  254.         .dc.b   3, 5, 0                 ; func 021              
  255.         .dc.b   5, 5, 0                 ; func 022              
  256.         .dc.b   0, 1, 1                 ; func 023              
  257.         .dc.b   2, 1, 0                 ; func 024              
  258.         .dc.b   16, 7, 1                ; func 025              
  259.         .dc.b   2, 1, 0                 ; func 026              
  260.         .dc.b   0, 0, 0                 ; func 027              
  261.         .dc.b   0, 0, 0                 ; func 028              
  262.         .dc.b   0, 0, 0                 ; func 009              
  263. ;    Menu Manager
  264.         .dc.b   1, 1, 1                 ; func 030              
  265.         .dc.b   2, 1, 1                 ; func 031              
  266.         .dc.b   2, 1, 1                 ; func 032              
  267.         .dc.b   2, 1, 1                 ; func 033              
  268.         .dc.b   1, 1, 2                 ; func 034              
  269.         .dc.b   1, 1, 1                 ; func 005              
  270.         .dc.b   0, 0, 0                 ; func 006              
  271.         .dc.b   0, 0, 0                 ; func 007              
  272.         .dc.b   0, 0, 0                 ; func 008              
  273.         .dc.b   0, 0, 0                 ; func 009              
  274. ;    Object Manager
  275.         .dc.b   2, 1, 1                 ; func 040              
  276.         .dc.b   1, 1, 1                 ; func 041              
  277.         .dc.b   6, 1, 1                 ; func 042              
  278.         .dc.b   4, 1, 1                 ; func 043              
  279.         .dc.b   1, 3, 1                 ; func 044              
  280.         .dc.b   2, 1, 1                 ; func 045              
  281.         .dc.b   4, 2, 1                 ; func 046              
  282.         .dc.b   8, 1, 1                 ; func 047              
  283.         .dc.b   0, 0, 0                 ; func 048              
  284.         .dc.b   0, 0, 0                 ; func 049              
  285. ;    Form Manager
  286.         .dc.b   1, 1, 1                 ; func 050              
  287.         .dc.b   9, 1, 1                 ; func 051              
  288.         .dc.b   1, 1, 1                 ; func 002              
  289.         .dc.b   1, 1, 0                 ; func 003              
  290.         .dc.b   0, 5, 1                 ; func 004              
  291.         .dc.b   0, 0, 0                 ; func 005              
  292.         .dc.b   0, 0, 0                 ; func 006              
  293.         .dc.b   0, 0, 0                 ; func 007              
  294.         .dc.b   0, 0, 0                 ; func 008              
  295.         .dc.b   0, 0, 0                 ; func 009              
  296. ;    Dialog Manager
  297.         .dc.b   0, 0, 0                 ; func 060              
  298.         .dc.b   0, 0, 0                 ; func 061              
  299.         .dc.b   0, 0, 0                 ; func 062              
  300.         .dc.b   0, 0, 0                 ; func 003              
  301.         .dc.b   0, 0, 0                 ; func 004              
  302.         .dc.b   0, 0, 0                 ; func 005              
  303.         .dc.b   0, 0, 0                 ; func 006              
  304.         .dc.b   0, 0, 0                 ; func 007              
  305.         .dc.b   0, 0, 0                 ; func 008              
  306.         .dc.b   0, 0, 0                 ; func 009              
  307. ;    Graphics Manager
  308.         .dc.b   4, 3, 0                 ; func 070              
  309.         .dc.b   8, 3, 0                 ; func 071              
  310.         .dc.b   6, 1, 0                 ; func 072              
  311.         .dc.b   8, 1, 0                 ; func 073              
  312.         .dc.b   8, 1, 0                 ; func 074              
  313.         .dc.b   4, 1, 1                 ; func 075              
  314.         .dc.b   3, 1, 1                 ; func 076              
  315.         .dc.b   0, 5, 0                 ; func 077              
  316.         .dc.b   1, 1, 1                 ; func 078              
  317.         .dc.b   0, 5, 0                 ; func 009              
  318. ;    Scrap Manager
  319.         .dc.b   0, 1, 1                 ; func 080              
  320.         .dc.b   0, 1, 1                 ; func 081              
  321.         .dc.b   0, 0, 0                 ; func 082              
  322.         .dc.b   0, 0, 0                 ; func 083              
  323.         .dc.b   0, 0, 0                 ; func 084              
  324.         .dc.b   0, 0, 0                 ; func 005              
  325.         .dc.b   0, 0, 0                 ; func 006              
  326.         .dc.b   0, 0, 0                 ; func 007              
  327.         .dc.b   0, 0, 0                 ; func 008              
  328.         .dc.b   0, 0, 0                 ; func 009              
  329. ;    fseler Manager
  330.         .dc.b   0, 2, 2                 ; func 090              
  331.         .dc.b   0, 0, 0                 ; func 091              
  332.         .dc.b   0, 0, 0                 ; func 092              
  333.         .dc.b   0, 0, 0                 ; func 003              
  334.         .dc.b   0, 0, 0                 ; func 004              
  335.         .dc.b   0, 0, 0                 ; func 005              
  336.         .dc.b   0, 0, 0                 ; func 006              
  337.         .dc.b   0, 0, 0                 ; func 007              
  338.         .dc.b   0, 0, 0                 ; func 008              
  339.         .dc.b   0, 0, 0                 ; func 009              
  340. ;    Window Manager
  341.         .dc.b   5, 1, 0                 ; func 100              
  342.         .dc.b   5, 1, 0                 ; func 101              
  343.         .dc.b   1, 1, 0                 ; func 102              
  344.         .dc.b   1, 1, 0                 ; func 103              
  345.         .dc.b   2, 5, 0                 ; func 104              
  346.         .dc.b   6, 1, 0                 ; func 105              
  347.         .dc.b   2, 1, 0                 ; func 106              
  348.         .dc.b   1, 1, 0                 ; func 107              
  349.         .dc.b   6, 5, 0                 ; func 108              
  350.         .dc.b   0, 0, 0                 ; func 009              
  351. ;    Resource Manger
  352.         .dc.b   0, 1, 1                 ; func 110              
  353.         .dc.b   0, 1, 0                 ; func 111              
  354.         .dc.b   2, 1, 0                 ; func 112              
  355.         .dc.b   2, 1, 1                 ; func 113              
  356.         .dc.b   1, 1, 1                 ; func 114              
  357.         .dc.b   0, 0, 0                 ; func 115              
  358.         .dc.b   0, 0, 0                 ; func 006
  359.         .dc.b   0, 0, 0                 ; func 007
  360.         .dc.b   0, 0, 0                 ; func 008
  361.         .dc.b   0, 0, 0                 ; func 009
  362. ;    Shell Manager
  363.         .dc.b   0, 1, 2                 ; func 120
  364.         .dc.b   3, 1, 2                 ; func 121
  365.         .dc.b   1, 1, 1                 ; func 122
  366.         .dc.b   1, 1, 1                 ; func 123
  367.         .dc.b   0, 1, 1                 ; func 124
  368.         .dc.b   0, 1, 2                 ; func 125
  369.  
  370.  
  371.  
  372.