home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / INFO / EDITOR / MG2A_SRC.ZIP / SYS / ATARI / GEMSTART.S < prev    next >
Encoding:
Text File  |  1988-08-23  |  8.2 KB  |  314 lines

  1. ******************************************************************************
  2. *
  3. *    C runtime startup for CP/M-68k.
  4. *
  5. ******************************************************************************
  6. *
  7. ltpa=0            * Low TPA address
  8. htpa=4            * High TPA address
  9. lcode=8            * Code segment start
  10. codelen=12        * Code segment length
  11. ldata=16        * Data segment start
  12. datalen=20        * Data segment length
  13. lbss=24            * Bss  segment start
  14. bsslen=28        * Bss  segment length
  15. freelen=32        * free segment length
  16. resvd=36        * Reserved
  17. fcb2=56            * 2nd parsed fcb
  18. fcb1=92            * 1st parsed fcb
  19. command=128        * Command tail
  20. prtstr=9        * Print string BDOS Call
  21. exit=0            * BDOS exit call
  22. .globl    __main
  23. .globl    __exit
  24. .globl    __break
  25. .globl    ___cpmrv
  26. .globl    __base
  27. .globl  _sw_
  28. .globl    __sovf
  29.  
  30.  
  31.     .globl    _crystal
  32.     .globl    _ctrl_cnts
  33.  
  34.  
  35.         .text
  36.  
  37.  
  38. *
  39. *  Must be first object file in link statement
  40. *
  41.     move.l    a7,a5        * save a7 so we can get the base page address
  42.     move.l    4(a5),a5    * a5=basepage address
  43.     move.l    a5,__base    * save for C startup
  44.     move.l    $c(a5),d0
  45.     add.l    $14(a5),d0
  46.     add.l    $1c(a5),d0
  47.     add.l    #$2000,d0    * d0=basepage+textlen+datalen+bsslen
  48. *                  (plus room for user stack)
  49.     move.l    d0,d1
  50.     add.l    a5,d1        * compute stack top
  51.     and.l    #-2,d1        * ensure even byte boundary
  52.     move.l    d1,a7        * setup user stack, 1K above end of BSS
  53.  
  54.     move.l    d0,-(sp)
  55.     move.l    a5,-(sp)
  56.     clr.w    -(sp)        * junk word
  57.     move    #$4a,-(sp)    * return excess storage
  58.     trap    #1
  59.     add.l    #12,sp
  60.  
  61.  
  62.         move.l    __base,a0        *    Load C external
  63.         move.l    lbss(a0),a1        *    a1 -> bss region
  64.         adda.l    bsslen(a0),a1        *    a1 -> 1st heap loc
  65.  
  66.         move.l    a1,__break        *    Put in "break" loc
  67.         lea.l    command(a0),a2        *    a2 -> command line
  68.         move.b    (a2)+,d0        *    d0 = byte count
  69.         andi.l    #$ff,d0            *    clear junk
  70.         move.w    d0,-(a7)        *    push length
  71.         move.l    a2,-(a7)        *    Push commnd
  72.         clr.l    a6            *    Clear frame pointer
  73.         jsr    __main            *    call main routine
  74.         jmp    __exit            *    call "exit"
  75.  
  76. *
  77. *    For GEMAES calls from AESBIND.ARC or cryslib.o
  78. *
  79. _crystal:
  80.     move.l    4(a7),d1
  81.     move.w    #200,d0
  82.     trap    #2
  83.     rts
  84.  
  85. *
  86. *    control array for vdibind
  87. *
  88.     .data
  89.         .even
  90. _ctrl_cnts:                 *    Application Manager
  91.     .dc.b    0, 1, 0            * func 010        
  92.         .dc.b    2, 1, 1            * func 011        
  93.         .dc.b    2, 1, 1         * func 012        
  94.     .dc.b    0, 1, 1            * func 013        
  95.     .dc.b    2, 1, 1            * func 014        
  96.     .dc.b    1, 1, 1            * func 015        
  97.     .dc.b    0, 0, 0            * func 016        
  98.     .dc.b    0, 0, 0            * func 017        
  99.     .dc.b    0, 0, 0            * func 008        
  100.     .dc.b    0, 1, 0            * func 019        
  101. *                             Event Manager
  102.     .dc.b    0, 1, 0            * func 020        
  103.     .dc.b    3, 5, 0            * func 021        
  104.     .dc.b    5, 5, 0            * func 022        
  105.     .dc.b    0, 1, 1            * func 023        
  106.     .dc.b    2, 1, 0            * func 024        
  107.     .dc.b    16, 7, 1         * func 025        
  108.     .dc.b    2, 1, 0            * func 026        
  109.     .dc.b    0, 0, 0            * func 027        
  110.     .dc.b    0, 0, 0            * func 028        
  111.     .dc.b    0, 0, 0            * func 009        
  112. *                             Menu Manager
  113.     .dc.b    1, 1, 1            * func 030        
  114.     .dc.b    2, 1, 1            * func 031        
  115.     .dc.b    2, 1, 1            * func 032        
  116.     .dc.b    2, 1, 1            * func 033        
  117.     .dc.b    1, 1, 2            * func 034        
  118.     .dc.b    1, 1, 1            * func 005        
  119.     .dc.b    0, 0, 0            * func 006        
  120.     .dc.b    0, 0, 0            * func 007        
  121.     .dc.b    0, 0, 0            * func 008        
  122.     .dc.b    0, 0, 0            * func 009        
  123. *                             Object Manager
  124.     .dc.b    2, 1, 1            * func 040        
  125.     .dc.b    1, 1, 1            * func 041        
  126.       .dc.b    6, 1, 1            * func 042        
  127.     .dc.b    4, 1, 1            * func 043        
  128.     .dc.b    1, 3, 1            * func 044        
  129.     .dc.b    2, 1, 1            * func 045        
  130.     .dc.b    4, 2, 1            * func 046        
  131.     .dc.b    8, 1, 1            * func 047        
  132.     .dc.b    0, 0, 0            * func 048        
  133.     .dc.b    0, 0, 0            * func 049        
  134. *                             Form Manager
  135.     .dc.b    1, 1, 1            * func 050        
  136.     .dc.b    9, 1, 1            * func 051        
  137.     .dc.b    1, 1, 1            * func 002        
  138.     .dc.b    1, 1, 0            * func 003        
  139.     .dc.b    0, 5, 1            * func 004        
  140.     .dc.b    0, 0, 0            * func 005        
  141.     .dc.b    0, 0, 0            * func 006        
  142.     .dc.b    0, 0, 0            * func 007        
  143.     .dc.b    0, 0, 0            * func 008        
  144.     .dc.b    0, 0, 0            * func 009        
  145. *                             Dialog Manager
  146.     .dc.b    0, 0, 0            * func 060        
  147.     .dc.b    0, 0, 0            * func 061        
  148.     .dc.b    0, 0, 0            * func 062        
  149.     .dc.b    0, 0, 0            * func 003        
  150.     .dc.b    0, 0, 0            * func 004        
  151.     .dc.b    0, 0, 0            * func 005        
  152.     .dc.b    0, 0, 0            * func 006        
  153.     .dc.b    0, 0, 0            * func 007        
  154.     .dc.b    0, 0, 0            * func 008        
  155.     .dc.b    0, 0, 0            * func 009        
  156. *                            Graphics Manager
  157.     .dc.b    4, 3, 0            * func 070        
  158.     .dc.b    8, 3, 0            * func 071        
  159.     .dc.b    6, 1, 0            * func 072        
  160.     .dc.b    8, 1, 0            * func 073        
  161.     .dc.b    8, 1, 0            * func 074        
  162.     .dc.b    4, 1, 1            * func 075        
  163.     .dc.b    3, 1, 1            * func 076        
  164.     .dc.b    0, 5, 0            * func 077        
  165.     .dc.b    1, 1, 1            * func 078        
  166.     .dc.b    0, 5, 0            * func 009        
  167. *                            Scrap Manager
  168.     .dc.b    0, 1, 1            * func 080        
  169.     .dc.b    0, 1, 1            * func 081        
  170.     .dc.b    0, 0, 0            * func 082        
  171.     .dc.b    0, 0, 0            * func 083        
  172.     .dc.b    0, 0, 0            * func 084        
  173.     .dc.b    0, 0, 0            * func 005        
  174.     .dc.b    0, 0, 0            * func 006        
  175.     .dc.b    0, 0, 0            * func 007        
  176.     .dc.b    0, 0, 0            * func 008        
  177.     .dc.b    0, 0, 0            * func 009        
  178. *                            fseler Manager
  179.     .dc.b    0, 2, 2            * func 090        
  180.     .dc.b    0, 0, 0            * func 091        
  181.     .dc.b    0, 0, 0            * func 092        
  182.     .dc.b    0, 0, 0            * func 003        
  183.     .dc.b    0, 0, 0            * func 004        
  184.     .dc.b    0, 0, 0            * func 005        
  185.     .dc.b    0, 0, 0            * func 006        
  186.     .dc.b    0, 0, 0            * func 007        
  187.     .dc.b    0, 0, 0            * func 008        
  188.     .dc.b    0, 0, 0         * func 009        
  189. *                            Window Manager
  190.     .dc.b    5, 1, 0            * func 100        
  191.     .dc.b    5, 1, 0            * func 101        
  192.     .dc.b    1, 1, 0            * func 102        
  193.     .dc.b    1, 1, 0            * func 103        
  194.     .dc.b    2, 5, 0            * func 104        
  195.     .dc.b    6, 1, 0            * func 105        
  196.     .dc.b    2, 1, 0            * func 106        
  197.     .dc.b    1, 1, 0            * func 107        
  198.     .dc.b    6, 5, 0            * func 108        
  199.     .dc.b    0, 0, 0         * func 009        
  200. *                            Resource Manger
  201.     .dc.b    0, 1, 1            * func 110        
  202.     .dc.b    0, 1, 0            * func 111        
  203.     .dc.b    2, 1, 0            * func 112        
  204.     .dc.b    2, 1, 1            * func 113        
  205.     .dc.b    1, 1, 1            * func 114        
  206.     .dc.b    0, 0, 0            * func 115        
  207.     .dc.b    0, 0, 0            * func 006
  208.     .dc.b    0, 0, 0            * func 007
  209.     .dc.b    0, 0, 0            * func 008
  210.     .dc.b    0, 0, 0            * func 009
  211. *                            Shell Manager
  212.     .dc.b    0, 1, 2            * func 120
  213.     .dc.b    3, 1, 2            * func 121
  214.     .dc.b    1, 1, 1            * func 122
  215.     .dc.b    1, 1, 1            * func 123
  216.     .dc.b    0, 1, 1            * func 124
  217.     .dc.b    0, 1, 2            * func 125
  218.  
  219.     .bss
  220.     .even
  221. __base:        .ds.l    1            *    -> Base Page
  222. __break:    .ds.l    1            *    Break function
  223. ___cpmrv:    .ds.w    1            *    Last CP/M return val
  224.  
  225.  
  226.  
  227. *
  228. *
  229. .globl    _brk
  230.         .text
  231. _brk:        
  232.         movea.l    4(sp),a0        *    New break?
  233.         move.l     a0,d0
  234.         lea    $100(a0),a0        *    Chicken factor
  235.         cmpa.l    a0,sp            *    Compare
  236.         bhis    brkok            *    OK, continue
  237.         move.l    #-1,d0            *    Load return reg
  238.         rts                *    Return
  239. brkok:
  240.         move.l    d0,__break        *    Save the break
  241.         clr.l    d0            *    Set OK return
  242.         rts                *    return
  243.         
  244. .globl    ___BDOS
  245. ___BDOS:    link    a6,#0            *    link
  246.         move.w    8(sp),d0        *    Load func code
  247.         move.l    10(sp),d1        *    Load Paramter
  248.         trap    #2            *    Enter BDOS
  249.         cmpa.l    __break,sp        *    Check for stack ovf
  250.         bhis    noovf            *    NO overflow, continue
  251. __sovf:        move.w    #prtstr,d0        *    String print
  252.         lea    ovf,a0            *    a0-> message
  253.         move.l    a0,d1            *    load proper reg
  254.         trap    #2            *    Issue message
  255. __exit:        move.w    #exit,d0        *    Exit
  256.         trap    #2            *        now
  257. noovf:                        *    Here if all OK
  258.         unlk    a6            *
  259.         rts                *    Back to caller
  260. *
  261. *    Block Fill function:
  262. *
  263. *    blkfill(dest,char,cnt);
  264. *
  265. *    BYTE    *dest;        /* -> area to be filled    */
  266. *    BYTE    char;        /* =  char to fill    */
  267. *    WORD    cnt;        /* =  # bytes to fill   */
  268. *
  269.     .globl    _blkfill
  270. _blkfill:
  271.     move.l    4(a7),a0            *    -> Output area
  272.     move.w    8(a7),d1            *    =  output char
  273.     move.w    10(a7),d0            *    =  output count
  274.     ext.l    d0                *    make it long
  275.     subq.l    #1,d0                *    decrement
  276.     ble    filldone            *    Done if le
  277. fillit:    move.b    d1,(a0)+            *    move a byte
  278.     dbra    d0,fillit            *    Continue
  279. filldone: clr.l    d0                *    always return 0
  280.     rts                    *
  281.  
  282. *
  283. *    Index function to find out if a particular character is in a string.
  284. *
  285.     .globl    _index
  286.     .globl    _strchr
  287. _index:
  288. _strchr:
  289.     move.l    4(a7),a0            *    a0 -> String
  290.     move.w    8(a7),d0            *    D0 = desired character
  291. xindex:    tst.b    (a0)                *    EOS?
  292.     bne    notend                *    No, continue to look
  293.     clr.l    d0                *    Not found
  294.     rts                    *    Quit
  295. notend:    cmp.b    (a0)+,d0            *    check for character
  296.     bne    xindex                *    
  297.     move.l    a0,d0                *    Found it
  298.     subq.l    #1,d0                *    set return pointer
  299.     rts                    *
  300. *
  301. *    Data area
  302. *
  303.         .data
  304.         .globl    ___pname        *    Program Name
  305.         .globl    ___tname        *    Terminal Name
  306.         .globl    ___lname        *    List device name
  307.         .globl    ___xeof            *    ^Z byte
  308. ovf:        .dc.b    'Stack Overflow$'    *    Error message
  309. ___pname:    .dc.b    'C runtime',0        *    Program name
  310. ___tname:    .dc.b    'CON:',0        *    Console name
  311. ___lname:    .dc.b    'LST:',0        *    List device name
  312. ___xeof:    .dc.b    $1a            *    Control-Z
  313.         .end
  314.