Notice‎ > ‎

LMC 1.3.4로 업그레이드 되었습니다.

게시자: 허대영, 2012. 10. 23. 오전 6:23

LMC 1.3.4

  • 다음의 사항이 변경되었습니다.
CPU
  • CPU의 Condition의 종류가 변경되었습니다.
    • 기존 COND_NO(Not Overflow)는 폐기되며, 대신 COND_CA(Carry)로 사용됩니다.
    • Condition 을 확인하세요.
  • LDX, STX 명령이 폐기되었습니다.
인터럽트
  • 인터럽트의 처리가 개선되었습니다.
  • 운영체제에서 사용할 수 있도록 인터럽트 처리 루틴에는 다음의 내용이 포함됩니다.
    • 예외 처리 핸들러
    • 하드웨어 인터럽트 핸들러
    • 소프트웨어 트랩 핸들러
BIOS
  • 바이오스의 호출이 변경됩니다.
    • 기존 JCall 방식에서 INT 명령을 이용하여 처리합니다.
    • Stack 보는 명령이 추가됩니다.
Monitor
  • 모니터의 기능이 개선됩니다.
    • Tape의 내용을 읽을 수 있는 cat 명령이 추가됩니다.
    • Tape을 교체하는 명령어 Change Cassette 의 오류가 수정되었습니다.
  • 모니터의 호출이 변경됩니다.
    • 기존 Call/Return 방식에서 INT 명령을 이용하여 처리합니다.

LMC 1.3.4로 업그레이드

LMC 1.3.4는 다음의 사항이 변경된다.

  • lmc.c
  • builtin
  • 메모리
    • memory/roms/rom*,
    • memory/roms/handler*,
    • memory/roms/monitor*,
    • memory/roms/bios*
  • CPU
    • cpu.c에서 Built-In CPU 모드가 추가되었다.
      • 아래와 같이 수정하지 않아도 동작하지만, instruction 확장(구현)시 부팅 및 INT 명령이 제대로 동작하지 않을 수 있다.
           // 485 line 근처
           switch(IR.code)
             {
               // CPU 구현.
             }
        
        위를 다음과 같이 수정해야 한다.
           if( isBuiltInCpuMode() ) {
             status = builtinExecution(IR,
                                       FIND_BUILTINOP(IO.opcode));
           } else {
             // 기존의 코드를 이곳에 넣는다.
             switch(IR.code)
               {
                 // CPU 구현.
               }
           }
        
    • cpu.c에서 인터럽트 enable/disable 기능을 활성화 해야 한다.
        // 448 라인 
        /* Interrupt Handle */
        if (GET_CPU_FLAG(P))
          {
            InterruptHandling();
            SET_CPU_FLAG(P, FALSE);
          }
      
      위를 다음과 같이 수정해야 한다.
        // 448 라인 
        /* Interrupt Handle */
        if (GET_CPU_FLAG(IF) && GET_CPU_FLAG(P))
          {
            InterruptHandling();
            SET_CPU_FLAG(P, FALSE);
          }
      

Comments