Annotation of hatari/tests/serial/mfp_ser.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * Hatari serial port test
        !             3:  *
        !             4:  * Partly based on the file serport.c and mfp.h from EmuTOS:
        !             5:  * Copyright (C) 2013-2018 The EmuTOS development team
        !             6:  *
        !             7:  * This file is distributed under the GPL, version 2 or at your
        !             8:  * option any later version.  See doc/license.txt for details.
        !             9:  */
        !            10: 
        !            11: #include <tos.h>
        !            12: 
        !            13: typedef unsigned char UBYTE;
        !            14: 
        !            15: /*==== MFP memory mapping =================================================*/
        !            16: typedef struct
        !            17: {
        !            18:        UBYTE   dum1;
        !            19:        volatile UBYTE  gpip;   /* general purpose .. register */
        !            20:        UBYTE   dum2;
        !            21:        volatile UBYTE  aer;    /* active edge register              */
        !            22:        UBYTE   dum3;
        !            23:        volatile UBYTE  ddr;    /* data direction register           */
        !            24:        UBYTE   dum4;
        !            25:        volatile UBYTE  iera;   /* interrupt enable register A       */
        !            26:        UBYTE   dum5;
        !            27:        volatile UBYTE  ierb;   /* interrupt enable register B       */
        !            28:        UBYTE   dum6;
        !            29:        volatile UBYTE  ipra;   /* interrupt pending register A      */
        !            30:        UBYTE   dum7;
        !            31:        volatile UBYTE  iprb;   /* interrupt pending register B      */
        !            32:        UBYTE   dum8;
        !            33:        volatile UBYTE  isra;   /* interrupt in-service register A   */
        !            34:        UBYTE   dum9;
        !            35:        volatile UBYTE  isrb;   /* interrupt in-service register B   */
        !            36:        UBYTE   dum10;
        !            37:        volatile UBYTE  imra;   /* interrupt mask register A         */
        !            38:        UBYTE   dum11;
        !            39:        volatile UBYTE  imrb;   /* interrupt mask register B         */
        !            40:        UBYTE   dum12;
        !            41:        volatile UBYTE  vr;     /* vector register                   */
        !            42:        UBYTE   dum13;
        !            43:        volatile UBYTE  tacr;   /* timer A control register          */
        !            44:        UBYTE   dum14;
        !            45:        volatile UBYTE  tbcr;   /* timer B control register          */
        !            46:        UBYTE   dum15;
        !            47:        volatile UBYTE  tcdcr;  /* timer C + D control register      */
        !            48:        UBYTE   dum16;
        !            49:        volatile UBYTE  tadr;   /* timer A data register             */
        !            50:        UBYTE   dum17;
        !            51:        volatile UBYTE  tbdr;   /* timer B data register             */
        !            52:        UBYTE   dum18;
        !            53:        volatile UBYTE  tcdr;   /* timer C data register             */
        !            54:        UBYTE   dum19;
        !            55:        volatile UBYTE  tddr;   /* timer D data register             */
        !            56:        UBYTE   dum20;
        !            57:        volatile UBYTE  scr;    /* syncronous character register     */
        !            58:        UBYTE   dum21;
        !            59:        volatile UBYTE  ucr;    /* USART control register            */
        !            60:        UBYTE   dum22;
        !            61:        volatile UBYTE  rsr;    /* receiver status register          */
        !            62:        UBYTE   dum23;
        !            63:        volatile UBYTE  tsr;    /* transmitter status register       */
        !            64:        UBYTE   dum24;
        !            65:        volatile UBYTE  udr;    /* USART data register               */
        !            66: } MFP;
        !            67: 
        !            68: #define MFP_BASE  ((MFP *)(0xfffffa00L))
        !            69: 
        !            70: /*
        !            71:  * MFP serial port i/o routines
        !            72:  */
        !            73: static long costat(void)
        !            74: {
        !            75:        if (MFP_BASE->tsr & 0x80)
        !            76:                return -1;
        !            77:        else
        !            78:                return 0;
        !            79: }
        !            80: 
        !            81: static void conout(char b)
        !            82: {
        !            83:        /* Wait for transmit buffer to become empty */
        !            84:        while(!costat())
        !            85:                ;
        !            86: 
        !            87:        /* Output to RS232 interface */
        !            88:        MFP_BASE->udr = (char)b;
        !            89: }
        !            90: 
        !            91: int main(int argc, char *argv[])
        !            92: {
        !            93:        char text[] = "The quick brown fox\njumps over the lazy dog\n";
        !            94:        int i;
        !            95:        void *sp = (void*)Super(0);
        !            96: 
        !            97:        MFP_BASE->scr = 0x00;
        !            98:        MFP_BASE->ucr = 0x88;
        !            99:        MFP_BASE->rsr = 0x01;
        !           100:        MFP_BASE->tsr = 0x01;
        !           101: 
        !           102:        for (i = 0; text[i] != 0; i++)
        !           103:                conout(text[i]);
        !           104: 
        !           105:        Super(sp);
        !           106: 
        !           107:        return 0;
        !           108: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.