หน้านี้รวมทุกอย่างที่รู้เกี่ยวกับข้อสอบจริง — ของปีที่แล้วที่มีกระดาษข้อสอบให้ดู และคำบอกเล่าจากรุ่นพี่ 2 คน พร้อมบอกตรง ๆ ว่าอันไหนเชื่อได้แค่ไหน
| ข้อ | เรื่อง | คะแนน |
|---|---|---|
| 1 | โปรแกรมภาษา Assembly | 30 |
| 2 | โปรแกรมหน่วงเวลา (Delay) | 20 |
| 3 | Timing Diagram ของ Instruction Cycle | 30 |
| รวม | 80 | |
“หน้าที่ไม่เขียนชื่อและรหัสจะไม่ได้รับการตรวจให้คะแนน” ปีนี้ข้อสอบมี 6 ข้อ น่าจะหนากว่า 10 หน้า — เผื่อเวลา 2 นาทีตอนต้นเขียนชื่อให้ครบทุกหน้าก่อนเริ่มทำ จะปลอดภัยที่สุด
“จงเขียนโปรแกรมภาษา Assembly ในการหน่วงเวลา (Delay) ขนาด 1ms (10 คะแนน) โดยสมมติที่ความถี่ 2MHz พร้อมแสดงวิธีการคำนวณมาอย่างละเอียด (10 คะแนน) (รวม 20 คะแนน)”
อาจารย์เคยยกคำตอบของนักศึกษาคนหนึ่งมาโพสต์ไว้เป็นตัวอย่างเตือน — เขาลอกโปรแกรมลบเลขจาก Lab 2 มาแล้วเขียนต่อท้ายว่า “delay 1 ms” ทั้งที่ไม่มีลูป ไม่มีตัวนับ และไม่มีการคำนวณ T-state เลย
→ ดูเฉลยเต็มของข้อนี้ พร้อมเครื่องมือคำนวณ
“มันจะมี datasheet, มีตาราง register นู่นนี่นั่นให้ ไม่ต้องเดาวิธีตอบ ส่วนมากกรอกลงช่องให้ถูกพอ มีแค่อธิบาย fold back memory ที่ให้เขียนเองมั้ง”
“1, 3, 4, 5 มั้ง พี่ก็จำไม่ได้ ที่เหลือเหมือนจะเป็นปลายภาคมั้ง memory foldback อ่ะ
จำได้แค่ข้อ 3 ปีพี่ให้เขียนโปรแกรมหา delay อันนี้เอามาจากแลป z80 อันที่สามมั้ง
ที่เหลือเหมือนจะเป็นให้เขียนคำสั่งดูจาก opcode แล้วเอามาทำ cycle อันนี้ดูจาก instruction set ที่ให้ในห้องสอบได้ยุ”
| ปีที่แล้ว | ปีนี้ | ต้องทำอะไรเพิ่ม | |
|---|---|---|---|
| จำนวนข้อ | 3 ข้อ | 6 ข้อ | เนื้อหากว้างขึ้นเท่าตัว บริหารเวลาให้ดี |
| คะแนน | 80 | 120 | — |
| รู้โจทย์ล่วงหน้า | ไม่รู้ | อาจารย์ประกาศทั้ง 6 ข้อ | ไม่มีข้ออ้าง — เตรียมตรงจุดได้เลย |
| ต่อประสาน memory + I/O (วาดวงจร) | ไม่มี | ข้อ 1 · 25 คะแนน | ของใหม่ — ดู ข้อ 1 |
| Memory foldback | มี (รุ่นพี่ยืนยัน) | ข้อ 2 + 6 · 30 คะแนน | น้ำหนักเพิ่ม — ดู ข้อ 2 |
| เขียน Assembly | ข้อ 1 · 30 คะแนน | ข้อ 3 · 20 คะแนน | ดู ข้อ 3 |
| โปรแกรมหน่วงเวลา (Delay) | ข้อ 2 · 20 คะแนน | อาจซ่อนอยู่ใน “……….” ของข้อ 3 | ต้องเตรียม — ดู หน้า Delay |
| Opcode / Address | อยู่ในข้อ 3 | ข้อ 4 · 25 คะแนน | แยกออกมาเป็นข้อเดี่ยว — ดู ข้อ 4 |
| Timing Diagram | ข้อ 3 · 30 คะแนน | ข้อ 5 · 20 คะแนน | ดู ข้อ 5 |
อาจารย์เขียนข้อ 3 ว่า “จงเขียนโค้ด Z80 Assembly ……….”
จุดไข่ปลาคือส่วนที่ยังไม่บอก และปีที่แล้วข้อ Assembly กับข้อ Delay เป็นคนละข้อกัน
รวมกัน 50 จาก 80 คะแนน
⇒ ต้องเตรียมทั้งสองแบบ: โปรแกรมที่คุยกับ memory/I/O (สำหรับข้อ 4 กับ 5 ต่อยอด)
และโปรแกรมหน่วงเวลาพร้อมการคำนวณ T-state
ปีนี้เรียนถึง Lab 2 เท่านั้น (ปีที่แล้วเรียนถึง Lab 11) ซึ่งจำกัดขอบเขตของโจทย์ Assembly ได้พอสมควร
แก้ค่าใน memory, ASCII, LD r,n, ADD A,r, HALT
ใช้ C16 คอมไพล์และ Z80Sim รัน/trace
บวก/ลบเลขจาก memory (LD HL,nn, LD A,(HL), ADD, SUB)
และไฟวิ่ง LED ด้วย OUT (40H),A + JR
โปรแกรมหน่วงเวลาและการคำนวณ T-state
แต่โจทย์ปีที่แล้วออกจากแลปนี้ ⇒ ยังต้องเตรียม
ถ้ายึดตามที่เรียนจริง คำสั่งที่ควรใช้ให้คล่องมีแค่ชุดนี้
อย่าลืมขึ้นต้นด้วย cpu "z80.tbl" และ hof "INT8"
ตามที่ใบงานทุกใบใช้ (มันคืออะไร)
LD r, n LD r, r' LD dd, nn
LD A, (HL) LD (HL), A LD A, (DE)
LD A, (nn) LD (nn), A
ADD A, r SUB r INC/DEC r, dd
XOR A CPL
IN A, (n) OUT (n), A
JR e / cc,e DJNZ e JP nn
HALT
ไม่น่าออก: LDIR, BIT/SET/RES,
IX/IY, interrupt, 8255 — เพราะยังไม่ได้เรียน แต่ถ้ารู้ไว้ก็ไม่เสียหาย
120 คะแนน 6 ข้อ — เรียงลำดับทำจากข้อที่คะแนนต่อนาทีสูงสุด