Yoshikazu Abe / Mbed 2 deprecated abz80

Dependencies:   mbed

Revision:
1:bd86d49d7622
Parent:
0:40cf46d9746d
--- a/BZ80.c	Sun May 01 08:21:23 2011 +0000
+++ b/BZ80.c	Sat May 07 19:06:35 2011 +0000
@@ -1,40 +1,20 @@
 /**************************************************************************/
 /***                                                                    ***/
-/***    ￿y￿W￿O￿V￿[￿P￿￿￿T                                                ***/
-/***                                                                    ***/
-/***    ̧￿ٖ￿￿FBZ80.C                                                    ***/
+/***    Z80 compatible cpu                                              ***/
 /***                                                                    ***/
-/***    Origin1 : MAME Z80￿R￿A                                            ***/
-/***    Origin2 : CP/M Player for Win32  Takeda.Toshiya 2004.03.05        ***/
-/***    MODIFY  : Y.ABE 2007.11.05 sh2￿ɈڐA BIG ENDIAN                    ***/
-/***    MODIFY  : Y.ABE 2011.04.29 mbed￿ɈڐA                            ***/
+/***    Original1 : MAME Z80                                            ***/
+/***    Original2 : CP/M Player for Win32  Takeda.Toshiya 2004.03.05    ***/
+/***    MODIFY  : Y.ABE 2007.11.05 Renesas sh2 BIG ENDIAN               ***/
+/***    MODIFY  : Y.ABE 2011.04.29 mbed                                 ***/
 /***                                                                    ***/
-/***    ￿￿￿￿￿F￿￿￿g￿b                                                ***/
-/***                                                                     ***/
 /**************************************************************************/
 #include    <stdio.h>
 #include "define.h"
 
-// SH2 SERIAL PORT CH
-#define SCU_SYS_PORT 0
-#define SCU_Z80_PORT 2
-
-// CP/M BASE ADDRESS
-#define TPA_BASE    0x100
-#define CPP_BASE    0xfd00
-#define BDOS_BASE    0xfe00
-#define BIOS_BASE    0xff00
-#define CpmBootTop    0xDC00
-#define CpmBootBot    0xF200        // bios￿￿￿￿
-
-#define MAX_FIND_FILE 256
-
-#define IRQ_ENTRY_MAX 8
-
 // Z80 register
 #define AF    regs[0].w
 #define BC    regs[1].w
-#define DE     regs[2].w
+#define DE    regs[2].w
 #define HL    regs[3].w
 #define IX    regs[4].w
 #define IY    regs[5].w
@@ -84,27 +64,14 @@
 #define ZF    0x40
 #define SF    0x80
 
-// sh2 FAT
-extern void CpmDiskFlashAll(void);
-extern void ExportFileStep1( char *filename );
-extern void ExportFileStep2( char *dskbuf, unsigned long siz );
-extern void ExportFileStep3( void );
-
-// sh2 serial
+// mbed serial
 extern void  SendZ80( char data );
 extern short RecvZ80( void );
 extern short BusySioZ80( void );
+
 // mbed led
 extern void OutLedZ80( unsigned char data );
 
-extern void    b2a2(uint32 data, int8 *buf);
-extern void    b2a4(uint32 data, int8 *buf);
-
-extern uint16 dsk10( uint16 io, uint16 data);
-extern uint16 dsk11( uint16 io, uint16 data);
-extern uint16 dsk12( uint16 io, uint16 data);
-extern void wsend( unsigned short ch, char *pnt );
-
 
 void Z80Init( void );
 void Z80Reset( void );
@@ -117,7 +84,7 @@
 void execute_opXY( void );
 
 
-// ￿y￿W￿O￿b￿o￿t￿￿￿W￿X￿^
+// cpu register
 union REGTYPE {
     uint8 b[2];
     uint16 w;
@@ -130,20 +97,17 @@
 uint8 IM, IFF1, IFF2, HALT;
 uint16 EA;
 
-// ￿y￿W￿O￿￿￿￿￿￿
-uint8 Z80Memory[Z80_MEM_SIZE];    // ￿y￿W￿O￿￿￿￿￿￿
-
-
+// z80 memory
+uint8 Z80Memory[Z80_MEM_SIZE];
 
 
 int count;
 
-// ￿f￿o￿b￿O￿֘A
+// 
 uint16 prvPC;
 
 
-
-// ￿e￿[￿u￿￿
+// 
 static const char cc_op[0x100] = {
      4,10, 7, 6, 4, 4, 7, 4, 4,11, 7, 6, 4, 4, 7, 4, 8,10, 7, 6, 4, 4, 7, 4,12,11, 7, 6, 4, 4, 7, 4,
      7,10,16, 6, 4, 4, 7, 4, 7,11,16, 6, 4, 4, 7, 4, 7,10,13, 6,11,11,10, 4, 7,11,13, 6, 4, 4, 7, 4,
@@ -448,14 +412,14 @@
 };
 
 /* --------------------------------------------------------------------------
-    ￿￿￿￿￿￿￿￿￿C￿g
+    memory write
 -------------------------------------------------------------------------- */
 void CPM_WriteMemory( uint16 addr, uint8 data )
 {
     Z80Memory[addr] = data;
 }
 /* --------------------------------------------------------------------------
-    ￿￿￿￿￿￿￿￿￿[￿h
+    memory read
 -------------------------------------------------------------------------- */
 uint8 CPM_ReadMemory( uint16 addr )
 {
@@ -463,14 +427,14 @@
 }
 
 /* --------------------------------------------------------------------------
-    ￿o￿̓|￿[￿g
+    output
 -------------------------------------------------------------------------- */
 
 void cpm_WriteIO( uint8 laddr, uint8 haddr, uint8 data )
 {
     switch( laddr ) {
 
-    case 0x00:        // ￿V￿￿￿A￿￿￿f￿[￿^￿|￿[￿g￿o￿￿     
+    case 0x00:        // serial output data     
         SendZ80( data );
         break;
 
@@ -479,12 +443,11 @@
         break;
 
     case 0xff:        // disk flash
-//        CpmDiskFlashAll();
         break;
     }
 }
 /* --------------------------------------------------------------------------
-    ￿￿[￿g
+    input
 -------------------------------------------------------------------------- */
 uint8 cpm_ReadIO( uint8 laddr, uint8 haddr )
 {
@@ -492,15 +455,15 @@
 
     switch( laddr ) {
 
-    case 0x00:        // ￿V￿￿￿A￿￿￿f￿[￿^￿|￿[￿g￿￿    
+    case 0x00:        // serial input data    
         ret = RecvZ80();
         break;
 
-    case 0x01:        // ￿V￿￿￿A￿￿￿X￿e￿[￿^￿X￿@1￿F￿G￿￿￿v￿e￿B
+    case 0x01:        // serial status
         if( BusySioZ80() == -1 ) {
-            ret = 1;
+            ret = 1;        // 
         } else {
-            ret = 0;
+            ret = 0;        // Arrival to data
         }
         break;
 
@@ -514,7 +477,7 @@
     return ret;
 }
 /* --------------------------------------------------------------------------
-    ￿f￿o￿b￿O￿֘A
+    debugger
 -------------------------------------------------------------------------- */
 void DispAdrDat( uint16 addr, uint8 dt )
 {
@@ -533,23 +496,21 @@
 
 void DispReg( void )
 {
-#if 0
-    int8 buf[128];
-
-    wsend( SCU_SYS_PORT, "PC   SP   IR   IX   IY   AF   BC   DE   HL   AF\'  BC\'  DE\'  HL\'\n\r" );
+    char buf[128];
+
+    WSendZ80( "PC   SP   IR   IX   IY   AF   BC   DE   HL   AF\'  BC\'  DE\'  HL\'\n\r" );
     sprintf( buf, "%04x %04x %04x %04x %04x %04x %04x %04x %04x %04x %04x %04x %04x\n\r",
         PC, SP, (_I<<8)|_R, IX, IY, AF, BC, DE, HL, exAF, exBC, exDE, exHL );
-    wsend( SCU_SYS_PORT, buf );
-    if(HALT){
-        wsend( SCU_SYS_PORT, "NOW HLAT\n\r" );
+    WSendZ80( buf );
+    if( HALT ) {
+        WSendZ80( "NOW HLAT\n\r" );
     }
-#endif
 }
 
 /*----------------------------------------------------------------------*/
-/*    ￿@￿\￿F ￿￿￿￿￿￿￿N￿￿￿A                                                    */
-/*    ￿￿ ￿￿￿￿                                                            */
-/*    ￿ߒl￿F ￿￿￿￿                                                            */
+/*                                                                      */
+/*                                                                      */
+/*                                                                      */
 /*----------------------------------------------------------------------*/
 void ClearZ80Memory( void )
 {
@@ -561,36 +522,36 @@
 }
 
 /*----------------------------------------------------------------------*/
-/*    ￿@￿\￿F    ￿￿￿￿￿￿￿￿￿[￿h￿￿￿￿                                          */
-/*    ￿￿    ￿￿￿￿                                                        */
-/*    ￿ߒl￿F    ￿￿￿￿                                                        */
+/*                                                                      */
+/*                                                                      */
+/*                                                                      */
 /*----------------------------------------------------------------------*/
 uint8 ReadMemory( uint16 addr )
 {
     return Z80Memory[addr];
 }
 /*----------------------------------------------------------------------*/
-/*    ￿@￿\￿F    ￿￿￿￿￿￿￿￿￿C￿g￿￿￿￿                                          */
-/*    ￿￿    ￿￿￿￿                                                        */
-/*    ￿ߒl￿F    ￿￿￿￿                                                        */
+/*                                                                      */
+/*                                                                      */
+/*                                                                      */
 /*----------------------------------------------------------------------*/
 void WriteMemory( uint16 addr, uint8 val )
 {
     Z80Memory[addr] = val;
 }
 /*----------------------------------------------------------------------*/
-/*    ￿@￿\￿F    ￿￿￿￿￿￿￿￿￿[￿h￿P￿U￿r￿b￿g￿￿￿￿                                  */
-/*    ￿￿    ￿￿￿￿                                                        */
-/*    ￿ߒl￿F    ￿￿￿￿                                                        */
+/*                                    */
+/*                                                          */
+/*                                                           */
 /*----------------------------------------------------------------------*/
 uint16 ReadMemory16( uint16 addr )
 {
     return ReadMemory( addr ) | (ReadMemory( addr + 1 ) << 8);
 }
 /*----------------------------------------------------------------------*/
-/*    ￿@￿\￿F    ￿￿￿￿￿￿￿￿￿C￿g￿P￿U￿r￿b￿g￿￿￿￿                                  */
-/*    ￿￿    ￿￿￿￿                                                        */
-/*    ￿ߒl￿F    ￿￿￿￿                                                        */
+/*                                      */
+/*                                                        */
+/*                                                           */
 /*----------------------------------------------------------------------*/
 void WriteMemory16( uint16 addr, uint16 val )
 {
@@ -598,18 +559,18 @@
     WriteMemory( addr + 1, val >> 8 );
 }
 /*----------------------------------------------------------------------*/
-/*    ￿@￿\￿F    ￿t￿F￿b￿`￿￿￿￿                                              */
-/*    ￿￿    ￿￿￿￿                                                        */
-/*    ￿ߒl￿F    ￿￿￿￿                                                        */
+/*                                                  */
+/*                                                 */
+/*                                                           */
 /*----------------------------------------------------------------------*/
 uint8 Fetch( void )
 {
     return ReadMemory( PC++ );
 }
 /*----------------------------------------------------------------------*/
-/*    ￿@￿\￿F    ￿t￿F￿b￿`￿￿￿￿                                              */
-/*    ￿￿    ￿￿￿￿                                                        */
-/*    ￿ߒl￿F    ￿￿￿￿                                                        */
+/*                                                */
+/*                                                          */
+/*                                                        */
 /*----------------------------------------------------------------------*/
 uint16 Fetch16( void )
 {
@@ -660,7 +621,7 @@
 
 
 
-// ￿￿￿΃A￿h￿￿￿X
+// 
 void EAX( void )
 {
     int16 res;
@@ -687,7 +648,7 @@
 }
 
 
-// ￿I￿y￿￿￿￿￿h
+// 
 void JP( void )
 {
     PC = ReadMemory16(PC);
@@ -758,7 +719,7 @@
 
 void EI( void )
 {
-    IFF1 = 3; // ￿￿￿̎￿￿̖￿￿߂￿￿￿￿￿ IFF
+    IFF1 = 3; //
     IFF2 = 1;
 }
 
@@ -1230,14 +1191,11 @@
 
 void Z80Init( void )
 {
-    // ￿￿￿￿ 
+    // 
     AF = BC = DE = HL = IX = IY = 0;
     _I = _R = 0;
     exAF = exBC = exDE = exHL = 0;
 
-//    PC = TPA_BASE;
-//    SP = CPP_BASE - 1;
-
     PC = 0;
 
     IM = IFF1 = IFF2 = HALT = 0;
@@ -1247,24 +1205,13 @@
 
 }
 /*----------------------------------------------------------------------*/
-/*    ￿@￿\￿F ￿y￿W￿O ￿￿￿Z￿b￿g￿￿￿￿                                            */
-/*    ￿￿ ￿￿￿￿                                                            */
-/*    ￿ߒl￿F                                                                 */
 /*----------------------------------------------------------------------*/
 void Z80Reset( void )
 {
-    // CP/M ￿￿￿Z￿b￿g
- //   PC = TPA_BASE;
-//    SP = CPP_BASE - 1;
-//    PUSH(CPP_BASE);
     _I = _R = 0;
- //   AF = 0xffff;
     IM = IFF1 = IFF2 = HALT = 0;
 }
 /*----------------------------------------------------------------------*/
-/*    ￿@￿\￿F ￿y￿W￿O ￿h￿q￿p￿￿￿￿                                            */
-/*    ￿￿ ￿￿￿￿                                                            */
-/*    ￿ߒl￿F                                                                 */
 /*----------------------------------------------------------------------*/
 void Z80DoIRQ( uint8 vector )
 {
@@ -1327,13 +1274,10 @@
 
 }
 /*----------------------------------------------------------------------*/
-/*    ￿@￿\￿F ￿y￿W￿O ￿m￿l￿h￿￿￿￿                                            */
-/*    ￿￿ ￿￿￿￿                                                            */
-/*    ￿ߒl￿F                                                                 */
 /*----------------------------------------------------------------------*/
 void Z80DoNMI( void )
 {
-    // NMI￿￿￿￿
+    // 
     if( HALT ) {
         PC++;
         HALT = 0;
@@ -1345,16 +1289,18 @@
     IFF1 = 0;
 }
 /*----------------------------------------------------------------------*/
-/*    ￿@￿\￿F ￿y￿W￿O￿V￿[￿P￿￿￿T                                                */
-/*    ￿￿ ￿￿￿￿                                                            */
-/*    ￿ߒl￿F                                                                 */
 /*----------------------------------------------------------------------*/
 int Z80Run( void )
 {
+#ifdef DBG01
+    char buf[8];
+#endif
+
+
 #if 0
-    // 1￿￿￿߂￿￿￿￿
s￿￿￿￿   count = 0;
-
-    // IFF1￿̏￿￿￿
+   count = 0;
+
+    // 
     if( IFF1 > 1 ) {
         if( --IFF1 == 1 ) {
             InterruptEnabled();
@@ -1362,18 +1308,27 @@
     }
 
 #endif
+
+#ifdef DBG01
+    DispReg();
+#endif
+
     if( !HALT ) {
         execute_op();
+
+#ifdef DBG01
+        DispReg();
+        WRecvZ80(buf);
+#endif
     }
 
-    // ￿T￿￿￿N￿￿￿b￿N￿￿￿￿￿
 //    return -count;
     return 1;
 }
 /*----------------------------------------------------------------------*/
-/*    ￿@￿\￿F ￿y￿W￿O￿￿￿߂̃t￿F￿b￿`￿A￿f￿R￿[￿h￿Ǝ
s                            */
-/*    ￿￿ ￿￿￿￿                                                            */
-/*    ￿ߒl￿F ￿￿￿￿                                                            */
+/*                               */
+/*                                                             */
+/*                                                               */
 /*----------------------------------------------------------------------*/
 void execute_op( void )
 {
@@ -2422,9 +2377,9 @@
     }
 }
 /*----------------------------------------------------------------------*/
-/*    ￿@￿\￿F ￿y￿W￿O ￿b￿a￿v￿￿￿t￿B￿b￿N￿X                                    */
-/*    ￿￿ ￿￿￿￿                                                            */
-/*    ￿ߒl￿F ￿￿￿￿                                                            */
+/*    &#65533;@&#65533;\&#65533;F &#65533;y&#65533;W&#65533;O &#65533;b&#65533;a&#65533;v&#65533;&#65533;&#65533;t&#65533;B&#65533;b&#65533;N&#65533;X                                    */
+/*    &#65533;&#65533; &#65533;&#65533;&#65533;&#65533;                                                            */
+/*    &#65533;&#2002;l&#65533;F &#65533;&#65533;&#65533;&#65533;                                                            */
 /*----------------------------------------------------------------------*/
 void execute_opCB( void )
 {
@@ -3204,9 +3159,9 @@
     }
 }
 /*----------------------------------------------------------------------*/
-/*    ￿@￿\￿F ￿y￿W￿O ￿c￿c￿v￿￿￿t￿B￿b￿N￿X                                    */
-/*    ￿￿ ￿￿￿￿                                                            */
-/*    ￿ߒl￿F ￿￿￿￿                                                            */
+/*    &#65533;@&#65533;\&#65533;F &#65533;y&#65533;W&#65533;O &#65533;c&#65533;c&#65533;v&#65533;&#65533;&#65533;t&#65533;B&#65533;b&#65533;N&#65533;X                                    */
+/*    &#65533;&#65533; &#65533;&#65533;&#65533;&#65533;                                                            */
+/*    &#65533;&#2002;l&#65533;F &#65533;&#65533;&#65533;&#65533;                                                            */
 /*----------------------------------------------------------------------*/
 void execute_opDD( void )
 {
@@ -3509,9 +3464,9 @@
     }
 }
 /*----------------------------------------------------------------------*/
-/*    ￿@￿\￿F ￿y￿W￿O ￿d￿c￿v￿￿￿t￿B￿b￿N￿X                                    */
-/*    ￿￿ ￿￿￿￿                                                            */
-/*    ￿ߒl￿F ￿￿￿￿                                                            */
+/*    &#65533;@&#65533;\&#65533;F &#65533;y&#65533;W&#65533;O &#65533;d&#65533;c&#65533;v&#65533;&#65533;&#65533;t&#65533;B&#65533;b&#65533;N&#65533;X                                    */
+/*    &#65533;&#65533; &#65533;&#65533;&#65533;&#65533;                                                            */
+/*    &#65533;&#2002;l&#65533;F &#65533;&#65533;&#65533;&#65533;                                                            */
 /*----------------------------------------------------------------------*/
 void execute_opED( void )
 {
@@ -3774,38 +3729,22 @@
         OTDR();
         break;
 
-
-    // ￿ȉ￿￿ABIOS/BDOS￿R￿[￿￿￿p￿̃_￿~￿[￿￿￿ߌQ
+    //////
     case 0xe0: case 0xe1: case 0xe2: case 0xe3: case 0xe4: case 0xe5: case 0xe6: case 0xe7:
     case 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef:
     case 0xf0: case 0xf1: case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: case 0xf7:
     case 0xf8:
-//        if(prvPC >= BIOS_BASE) {
-//            if(!cpm->BIOS(cmd - 0xe0, &BC, &DE, &HL, &_A))
-//                HALT = 1;
-//        }
         break;
 
 
     case 0xfe:
-//        if(prvPC == CPP_BASE) {
-//            cpm->CPP();
-//            HALT = 1;
-//        }
         break;
 
     case 0xff:
-//        if(prvPC >= BDOS_BASE) {
-//            if(!cpm->BDOS(_C, &DE, &HL, &_A))
-//                HALT = 1;
-//        }
         break;
     }
 }
 /*----------------------------------------------------------------------*/
-/*    ￿@￿\￿F ￿y￿W￿O ￿e￿c￿v￿￿￿t￿B￿b￿N￿X                                    */
-/*    ￿￿ ￿￿￿￿                                                            */
-/*    ￿ߒl￿F ￿￿￿￿                                                            */
 /*----------------------------------------------------------------------*/
 void execute_opFD( void )
 {
@@ -4113,9 +4052,9 @@
     }
 }
 /*----------------------------------------------------------------------*/
-/*    ￿@￿\￿F ￿y￿W￿O DD(FD),CB ￿v￿￿￿t￿B￿b￿N￿X                                */
-/*    ￿￿ ￿￿￿￿                                                            */
-/*    ￿ߒl￿F ￿￿￿￿                                                            */
+/*    &#65533;@&#65533;\&#65533;F &#65533;y&#65533;W&#65533;O DD(FD),CB &#65533;v&#65533;&#65533;&#65533;t&#65533;B&#65533;b&#65533;N&#65533;X                                */
+/*    &#65533;&#65533; &#65533;&#65533;&#65533;&#65533;                                                            */
+/*    &#65533;&#2002;l&#65533;F &#65533;&#65533;&#65533;&#65533;                                                            */
 /*----------------------------------------------------------------------*/
 void execute_opXY( void )
 {