Changeset 4f508e6 in buchla-68k for iolib


Ignore:
Timestamp:
07/01/2017 02:34:46 PM (7 years ago)
Author:
Thomas Lopatic <thomas@…>
Branches:
master
Children:
08e1da1
Parents:
f40a309
Message:

Converted assembly language files.

Location:
iolib
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • iolib/hwdefs.s

    rf40a309 r4f508e6  
    1 * ------------------------------------------------------------------------------
    2 * hwdefs.s --  External definitions of Buchla 700 I/O addresses
    3 * Version 14 -- 1988-08-15 -- D.N. Lynx Crowe
    4 * ------------------------------------------------------------------------------
     1| ------------------------------------------------------------------------------
     2| hwdefs.s --  External definitions of Buchla 700 I/O addresses
     3| Version 14 -- 1988-08-15 -- D.N. Lynx Crowe
     4| ------------------------------------------------------------------------------
    55                .text
    6 *
     6
    77                .xdef   _io_time,_io_lcd,_io_ser,_io_midi
    88                .xdef   _io_disk,_io_tone,_io_leds,_io_kbrd
    99                .xdef   _io_vreg,_io_vraw,_io_vram,_io_fpu
    1010                .xdef   _lcd_a0,_lcd_a1
    11 *
     11
    1212                .xdef   _v_regs,_v_odtab,_v_actab
    1313                .xdef   _v_ct0
    1414                .xdef   _v_gt1
    1515                .xdef   _v_score,_v_cgtab
    16 *
     16
    1717                .xdef   _v_curs0,_v_curs1,_v_curs2,_v_curs3
    1818                .xdef   _v_curs4,_v_curs5,_v_curs6,_v_curs7
     
    2020                .xdef   _v_win0
    2121                .xdef   _v_cur
    22 *
     22
    2323                .xdef   _fc_sw,_fc_val
    24 *
    25 * ------------------------------------------------------------------------------
    26 *
    27 * Hardware base addresses
    28 * -----------------------
    29 _io_fpu         .equ    $180000         * FPU base address
    30 *
    31 VB              .equ    $200000         * VSDD base address
    32 *
    33 _io_time        .equ    $3A0001         * Timer chip
    34 _io_lcd         .equ    $3A4001         * LCD controller
    35 _io_ser         .equ    $3A8001         * Serial ports  (RS232)
    36 _io_midi        .equ    $3AC001         * MIDI ports
    37 _io_disk        .equ    $3B0001         * Disk controller
    38 _io_tone        .equ    $3B4001         * Sound generator chip
    39 _io_leds        .equ    $3B8001         * LED driver
    40 _io_kbrd        .equ    $3BC001         * Keyboard / panel processor
    41 *
    42 _lcd_a0         .equ    _io_lcd         * LCD port a0
    43 _lcd_a1         .equ    _io_lcd+2       * LCD port a1
    44 *
     24
     25| ------------------------------------------------------------------------------
     26
     27| Hardware base addresses
     28| -----------------------
     29_io_fpu         =       0x180000        | FPU base address
     30
     31VB              =       0x200000        | VSDD base address
     32
     33_io_time        =       0x3A0001        | Timer chip
     34_io_lcd         =       0x3A4001        | LCD controller
     35_io_ser         =       0x3A8001        | Serial ports  (RS232)
     36_io_midi        =       0x3AC001        | MIDI ports
     37_io_disk        =       0x3B0001        | Disk controller
     38_io_tone        =       0x3B4001        | Sound generator chip
     39_io_leds        =       0x3B8001        | LED driver
     40_io_kbrd        =       0x3BC001        | Keyboard / panel processor
     41
     42_lcd_a0         =       _io_lcd         | LCD port a0
     43_lcd_a1         =       _io_lcd+2       | LCD port a1
     44
    4545                .page
    46 *
    47 * Video definitions
    48 * -----------------
    49 _io_vreg        .equ    VB              * Relocated video registers after setup
    50 _io_vraw        .equ    VB+$400         * Raw video registers at RESET
    51 _io_vram        .equ    VB              * Video RAM base address
    52 *
    53 * Name                  Offset            Usage                        Bank
    54 * -------               ---------         -------------------------    ----
    55 _v_regs         .equ    VB              * Video registers              0,1
    56 *
    57 _v_odtab        .equ    VB+128          * Object Descriptor Table       0
    58 _v_actab        .equ    VB+256          * Access Table                  0
    59 _v_ct0          .equ    VB+1024         * Character Text-0              0
    60 _v_gt1          .equ    VB+1304         * Graphics Text-1               0
    61 _v_score        .equ    VB+8192         * Score object                  0
    62 _v_cgtab        .equ    VB+122880       * Character Generator Table     0
    63 *
    64 _v_curs0        .equ    VB+1024         * Cursor object 0  (arrow ULE)  1
    65 _v_curs1        .equ    VB+1152         * Cursor object 1  (arrow ULO)  1
    66 _v_curs2        .equ    VB+1280         * Cursor object 2  (arrow URE)  1
    67 _v_curs3        .equ    VB+1408         * Cursor object 3  (arrow URO)  1
    68 _v_curs4        .equ    VB+1536         * Cursor object 4  (arrow LLE)  1
    69 _v_curs5        .equ    VB+1664         * Cursor object 5  (arrow LLO)  1
    70 _v_curs6        .equ    VB+1792         * Cursor object 6  (arrow LRE)  1
    71 _v_curs7        .equ    VB+1920         * Cursor object 7  (arrow LRO)  1
    72 _v_tcur         .equ    VB+2048         * Typewriter cursor             1
    73 _v_kbobj        .equ    VB+2880         * Keyboard object               1
    74 _v_lnobj        .equ    VB+4672         * Line object                   1
    75 _v_cur          .equ    VB+6464         * Underline cursor              1
    76 _v_win0         .equ    VB+16384        * Window-0 object               1
    77 *
    78 * BIOS RAM definitions
    79 * --------------------
    80 * WARNING: the following addresses must match those of the corresponding
    81 * variables defined in bios.s or chaos is guaranteed.
    82 *
    83 _fc_sw          .equ    $420            * word - Frame counter switch
    84 _fc_val         .equ    $422            * long - Frame counter value
    85 *
     46
     47| Video definitions
     48| -----------------
     49_io_vreg        =       VB              | Relocated video registers after setup
     50_io_vraw        =       VB+0x400        | Raw video registers at RESET
     51_io_vram        =       VB              | Video RAM base address
     52
     53| Name                  Offset            Usage                        Bank
     54| -------               ---------         -------------------------    ----
     55_v_regs         =       VB              | Video registers              0,1
     56
     57_v_odtab        =       VB+128          | Object Descriptor Table       0
     58_v_actab        =       VB+256          | Access Table                  0
     59_v_ct0          =       VB+1024         | Character Text-0              0
     60_v_gt1          =       VB+1304         | Graphics Text-1               0
     61_v_score        =       VB+8192         | Score object                  0
     62_v_cgtab        =       VB+122880       | Character Generator Table     0
     63
     64_v_curs0        =       VB+1024         | Cursor object 0  (arrow ULE)  1
     65_v_curs1        =       VB+1152         | Cursor object 1  (arrow ULO)  1
     66_v_curs2        =       VB+1280         | Cursor object 2  (arrow URE)  1
     67_v_curs3        =       VB+1408         | Cursor object 3  (arrow URO)  1
     68_v_curs4        =       VB+1536         | Cursor object 4  (arrow LLE)  1
     69_v_curs5        =       VB+1664         | Cursor object 5  (arrow LLO)  1
     70_v_curs6        =       VB+1792         | Cursor object 6  (arrow LRE)  1
     71_v_curs7        =       VB+1920         | Cursor object 7  (arrow LRO)  1
     72_v_tcur         =       VB+2048         | Typewriter cursor             1
     73_v_kbobj        =       VB+2880         | Keyboard object               1
     74_v_lnobj        =       VB+4672         | Line object                   1
     75_v_cur          =       VB+6464         | Underline cursor              1
     76_v_win0         =       VB+16384        | Window-0 object               1
     77
     78| BIOS RAM definitions
     79| --------------------
     80| WARNING: the following addresses must match those of the corresponding
     81| variables defined in bios.s or chaos is guaranteed.
     82
     83_fc_sw          =       0x420           | word - Frame counter switch
     84_fc_val         =       0x422           | long - Frame counter value
     85
    8686                .end
  • iolib/rtraps.s

    rf40a309 r4f508e6  
    1 * ------------------------------------------------------------------------------
    2 * rtraps.s -- define ROMP debug trap
    3 * Version 7 -- 1988-01-12 -- Copyright 1987, 1988 by D.N. Lynx Crowe
    4 * ------------------------------------------------------------------------------
     1| ------------------------------------------------------------------------------
     2| rtraps.s -- define ROMP debug trap
     3| Version 7 -- 1988-01-12 -- Copyright 1987, 1988 by D.N. Lynx Crowe
     4| ------------------------------------------------------------------------------
    55                .text
    6 *
     6
    77                .xdef   _trap15
    8 *
     8
    99                .xref   _rompbp
    10 *
     10
    1111                .xref   tr1sav,tr13sav,tr14sav
    1212                .xref   tr1rmp,tr13rmp,tr14rmp
    13 *
    14 BUCHLA          .equ    1               * IPL value:  0 = NASA , 1 = Buchla
    15 *
     13
     14BUCHLA          =       1               | IPL value:  0 = NASA , 1 = Buchla
     15
    1616                .ifeq   BUCHLA
    17 IPLEVEL         .equ    $0400           * NASA IPL = 4    (enable 5 and above)
     17IPLEVEL         =       0x0400          | NASA IPL = 4    (enable 5 and above)
    1818                .endc
    19 *
     19
    2020                .ifne   BUCHLA
    21 IPLEVEL         .equ    $0200           * Buchla IPL = 2  (enable 3 and above)
     21IPLEVEL         =       0x0200          | Buchla IPL = 2  (enable 3 and above)
    2222                .endc
    23 *
    24 IPL7            .equ    $0700           * IPL 7
    25 *
    26 * _trap15 -- ROMP debug trap  (used to implement breakpoints)
    27 * -------    ------------------------------------------------
    28 _trap15:        ori.w   #IPL7,sr                * Disable interrupts
    29                 move.w  #0,-(a7)                * Keep stack long aligned
    30                 movem.l d0-d7/a0-a7,-(a7)       * Save regs on stack
    31                 move.l  tr1sav,tr1rmp           * Save trap save areas
    32                 move.l  tr13sav,tr13rmp         * ...
    33                 move.l  tr14sav,tr14rmp         * ...
    34                 move.w  sr,d0                   * Get status register
    35                 andi.w  #$F8FF,d0               * Enable serial I/O interrupts
    36                 ori.w   #IPLEVEL,d0             * ...
    37                 move.w  d0,sr                   * ...
    38                 jsr     _rompbp                 * Pass control to ROMP
    39 *
    40                 ori.w   #IPL7,sr                * Disable interrupts
    41                 move.l  tr14rmp,tr14sav         * Restore trap save areas
    42                 move.l  tr13rmp,tr13sav         * ...
    43                 move.l  tr1rmp,tr1sav           * ...
    44                 movem.l (a7)+,d0-d7/a0-a7       * Restore regs
    45                 addq.l  #2,a7                   * Discard alignment filler word
    46                 rte                             * Back to what we interrupted
    47 *
     23
     24IPL7            =       0x0700          | IPL 7
     25
     26| _trap15 -- ROMP debug trap  (used to implement breakpoints)
     27| -------    ------------------------------------------------
     28_trap15:        ori.w   #IPL7,sr                | Disable interrupts
     29                move.w  #0,-(a7)                | Keep stack long aligned
     30                movem.l d0-d7/a0-a7,-(a7)       | Save regs on stack
     31                move.l  tr1sav,tr1rmp           | Save trap save areas
     32                move.l  tr13sav,tr13rmp         | ...
     33                move.l  tr14sav,tr14rmp         | ...
     34                move.w  sr,d0                   | Get status register
     35                andi.w  #0xF8FF,d0              | Enable serial I/O interrupts
     36                ori.w   #IPLEVEL,d0             | ...
     37                move.w  d0,sr                   | ...
     38                jsr     _rompbp                 | Pass control to ROMP
     39
     40                ori.w   #IPL7,sr                | Disable interrupts
     41                move.l  tr14rmp,tr14sav         | Restore trap save areas
     42                move.l  tr13rmp,tr13sav         | ...
     43                move.l  tr1rmp,tr1sav           | ...
     44                movem.l (a7)+,d0-d7/a0-a7       | Restore regs
     45                addq.l  #2,a7                   | Discard alignment filler word
     46                rte                             | Back to what we interrupted
     47
    4848                .end
  • iolib/setipl.s

    rf40a309 r4f508e6  
    1 *
    2 * setipl.s -- Set internal processor interrupt level
    3 * --------    --------------------------------------
    4 * Version 2 -- 1988-06-29 -- D.N. Lynx Crowe
    5 *
    6 *       short
    7 *       setipl(arg);
    8 *       short arg;
    9 *
    10 *       Sets processor interrupt level to arg.
    11 *       Returns old interrupt level, or -1 if arg < 0 or > 7
    12 *
    13 *       Assumes you are in supervisor mode.
    14 *       You get a Privelege Violation TRAP if you aren't.
    15 *
     1
     2| setipl.s -- Set internal processor interrupt level
     3| --------    --------------------------------------
     4| Version 2 -- 1988-06-29 -- D.N. Lynx Crowe
     5
     6|       short
     7|       setipl(arg);
     8|       short arg;
     9
     10|       Sets processor interrupt level to arg.
     11|       Returns old interrupt level, or -1 if arg < 0 or > 7
     12
     13|       Assumes you are in supervisor mode.
     14|       You get a Privelege Violation TRAP if you aren't.
     15
    1616                .text
    17 *
     17
    1818                .xdef   _setipl
    19 *
    20 _setipl:        link    a6,#0                   * Link up stack frames
    21                 move.w  8(a6),d0                * Get argument
    22                 tst.w   d0                      * Check lower limit
    23                 bmi     setipler                * Jump if < 0  (error)
    24 *
    25                 cmpi.w  #7,d0                   * Check upper limit
    26                 bgt     setipler                * Jump if > 7  (error)
    27 *
    28                 move.w  sr,d1                   * Get current level
    29                 move.w  d1,d2                   * ... save for later
    30                 lsl.w   #8,d0                   * Shift argument into position
    31                 andi.w  #$F8FF,d1               * Mask out old level
    32                 or.w    d0,d1                   * OR in new level
    33                 move.w  d2,d0                   * Setup return of old level
    34                 lsr.w   #8,d0                   * ...
    35                 andi.l  #$7,d0                  * ...
    36                 move.w  d1,sr                   * Set the new interrupt level
    37                 unlk    a6                      * Unlink stack frames
    38                 rts                             * Return to caller
    39 *
    40 setipler:       moveq.l #-1,d0                  * Setup to return error code
    41                 unlk    a6                      * Unlink stack frames
    42                 rts                             * Return to caller
    43 *
     19
     20_setipl:        link    a6,#0                   | Link up stack frames
     21                move.w  8(a6),d0                | Get argument
     22                tst.w   d0                      | Check lower limit
     23                bmi     setipler                | Jump if < 0  (error)
     24
     25                cmpi.w  #7,d0                   | Check upper limit
     26                bgt     setipler                | Jump if > 7  (error)
     27
     28                move.w  sr,d1                   | Get current level
     29                move.w  d1,d2                   | ... save for later
     30                lsl.w   #8,d0                   | Shift argument into position
     31                andi.w  #0xF8FF,d1              | Mask out old level
     32                or.w    d0,d1                   | OR in new level
     33                move.w  d2,d0                   | Setup return of old level
     34                lsr.w   #8,d0                   | ...
     35                andi.l  #0x7,d0                 | ...
     36                move.w  d1,sr                   | Set the new interrupt level
     37                unlk    a6                      | Unlink stack frames
     38                rts                             | Return to caller
     39
     40setipler:       moveq.l #-1,d0                  | Setup to return error code
     41                unlk    a6                      | Unlink stack frames
     42                rts                             | Return to caller
     43
    4444                .end
  • iolib/setsr.s

    rf40a309 r4f508e6  
    1 *
    2 * setsr.s -- Set processor status register
    3 * -------    -----------------------------
    4 * Version 1 -- 1988-06-29 -- D.N. Lynx Crowe
    5 *
    6 *       short
    7 *       setsr(arg);
    8 *       short arg;
    9 *
    10 *       Sets processor status register to 'arg'.
    11 *       Returns old status register value.
    12 *
    13 *       Assumes you are in supervisor mode.
    14 *       You get a Privelege Violation TRAP if you aren't.
    15 *
    16 *       Coded for speed -- this is as fast as you can get.
    17 *       No error checking is done -- assumes you know what you're doing.
    18 *
     1
     2| setsr.s -- Set processor status register
     3| -------    -----------------------------
     4| Version 1 -- 1988-06-29 -- D.N. Lynx Crowe
     5
     6|       short
     7|       setsr(arg);
     8|       short arg;
     9
     10|       Sets processor status register to 'arg'.
     11|       Returns old status register value.
     12
     13|       Assumes you are in supervisor mode.
     14|       You get a Privelege Violation TRAP if you aren't.
     15
     16|       Coded for speed -- this is as fast as you can get.
     17|       No error checking is done -- assumes you know what you're doing.
     18
    1919                .text
    20 *
     20
    2121                .xdef   _setsr
    22 *
    23 _setsr:         move.w  sr,d0                   * Get current sr
    24                 move.w  4(sp),sr                * Set new sr
    25                 rts                             * Return to caller
    26 *
     22
     23_setsr:         move.w  sr,d0                   | Get current sr
     24                move.w  4(sp),sr                | Set new sr
     25                rts                             | Return to caller
     26
    2727                .end
  • iolib/traps.s

    rf40a309 r4f508e6  
    1 *
    2 * traps.s -- define trap linkages for C routines
    3 * -------    -----------------------------------
    4 * Version 8 -- 1987-06-08 -- D.N. Lynx Crowe
    5 *
    6 * Caution:  these are serially re-useable, but NOT reentrant, so
    7 * don't use them in interrupt processing code.
    8 *
    9 * An exception is made for ROMP in _trap15 for breakpoints so that the
    10 * debug code can be debugged.
    11 *
     1
     2| traps.s -- define trap linkages for C routines
     3| -------    -----------------------------------
     4| Version 8 -- 1987-06-08 -- D.N. Lynx Crowe
     5
     6| Caution:  these are serially re-useable, but NOT reentrant, so
     7| don't use them in interrupt processing code.
     8
     9| An exception is made for ROMP in _trap15 for breakpoints so that the
     10| debug code can be debugged.
     11
    1212                .text
    13 *
     13
    1414                .xdef   _trap1
    1515                .xdef   _trap13,_trap14
    1616                .xdef   _xtrap15
    17 *
     17
    1818                .xdef   tr1sav,tr13sav,tr14sav
    1919                .xdef   tr1rmp,tr13rmp,tr14rmp
    20 *
    21 * _trap1 -- provide access to BDOS functions
    22 * ------    --------------------------------
    23 _trap1:         move.l  (a7)+,tr1sav            * Save return address
    24                 trap    #1                      * Do the trap
    25                 move.l  tr1sav,-(a7)            * Restore return address
    26                 rts                             * Return to caller
    27 *
    28 * _trap13 -- provide access to BIOS functions
    29 * -------    --------------------------------
    30 _trap13:        move.l  (a7)+,tr13sav           * Save return address
    31                 trap    #13                     * Do the trap
    32                 move.l  tr13sav,-(a7)           * Restore return address
    33                 rts                             * Return to caller
    34 *
    35 * _trap14 -- provide access to extended BIOS functions
    36 * -------    -----------------------------------------
    37 _trap14:        move.l  (a7)+,tr14sav           * Save return address
    38                 trap    #14                     * Do the trap
    39                 move.l  tr14sav,-(a7)           * Restore return address
    40                 rts                             * Return to caller
    41 *
    42 * _xtrap15 -- Setup initial register trap for ROMP
    43 * --------    ------------------------------------
    44 _xtrap15:       trap    #15                     * TRAP into ROMP
    45                 rts                             * Return  (usually won't happen)
    46 *
     20
     21| _trap1 -- provide access to BDOS functions
     22| ------    --------------------------------
     23_trap1:         move.l  (a7)+,tr1sav            | Save return address
     24                trap    #1                      | Do the trap
     25                move.l  tr1sav,-(a7)            | Restore return address
     26                rts                             | Return to caller
     27
     28| _trap13 -- provide access to BIOS functions
     29| -------    --------------------------------
     30_trap13:        move.l  (a7)+,tr13sav           | Save return address
     31                trap    #13                     | Do the trap
     32                move.l  tr13sav,-(a7)           | Restore return address
     33                rts                             | Return to caller
     34
     35| _trap14 -- provide access to extended BIOS functions
     36| -------    -----------------------------------------
     37_trap14:        move.l  (a7)+,tr14sav           | Save return address
     38                trap    #14                     | Do the trap
     39                move.l  tr14sav,-(a7)           | Restore return address
     40                rts                             | Return to caller
     41
     42| _xtrap15 -- Setup initial register trap for ROMP
     43| --------    ------------------------------------
     44_xtrap15:       trap    #15                     | TRAP into ROMP
     45                rts                             | Return  (usually won't happen)
     46
    4747                .page
    48 *
    49 * RAM storage areas
    50 * -----------------
     48
     49| RAM storage areas
     50| -----------------
    5151                .bss
    5252                .even
    53 *
    54 tr1sav:         ds.l    1               * Return address for trap1
    55 tr13sav:        ds.l    1               * Return address for trap13
    56 tr14sav:        ds.l    1               * Return address for trap14
    57 *
    58 tr1rmp:         ds.l    1               * Save area for tr1sav for ROMP
    59 tr13rmp:        ds.l    1               * Save area for tr13sav for ROMP
    60 tr14rmp:        ds.l    1               * Save area for tr14sav for ROMP
    61 *
     53
     54tr1sav:         ds.l    1               | Return address for trap1
     55tr13sav:        ds.l    1               | Return address for trap13
     56tr14sav:        ds.l    1               | Return address for trap14
     57
     58tr1rmp:         ds.l    1               | Save area for tr1sav for ROMP
     59tr13rmp:        ds.l    1               | Save area for tr13sav for ROMP
     60tr14rmp:        ds.l    1               | Save area for tr14sav for ROMP
     61
    6262                .end
Note: See TracChangeset for help on using the changeset viewer.